_lodash orderBy() и sortBy() сортировать объект на основе свойства 'weight'

Для тех, кто уже голосовал (отрицателен), я показываю, что мне нужно!

var obj = {
    item_1: {name:'aaa',weight:4},
    item_2: {name:'ddd',weight:2},
    item_5: {name:'eee',weight:0},
    item_3: {name:'ccc',weight:3},
    item_6: {name:'ccc',weight:23},
    item_4: {name:'eee',weight:1},
}

var arr = _.toPairs(obj)

console.log(arr)

var sortedArr = arr.sort(function(a,b){ return b[1].weight - a[1].weight})

console.log(sortedArr)

var sortedObj = _.fromPairs(sortedArr)

console.log(JSON.stringify(sortedObj))

живая ссылка здесь: сортировать объект на основе 'weight'property

изучите, прежде чем судить.

У меня есть массив объектов, подобный этому:

var obj = {
    item_1: {name:'aaa',weight:4},
    item_2: {name:'ddd',weight:2},
    item_3: {name:'ccc',weight:3},
    item_4: {name:'eee',weight:1},
}

Когда я запускаю: _.orderBy or _.sortBy()

например.: _.orderBy(obj,['weight']).

Я получаю отсортированный массив , но без начальных ключей

0: {name: "eee", weight: 1}
1: {name: "ddd", weight: 2}
2: {name: "ccc", weight: 3}
3: {name: "aaa", weight: 4}

Но мне нужны исходные ключи item_1, item_2 и т.д.

Может кто-нибудь дать руку? Спасибо.

Ответ 1

Посмотрите, поможет ли это вам. Вы можете удалить дополнительное свойство key, если это необходимо.

var obj = {
    item_1: {name:'aaa',weight:4},
    item_2: {name:'ddd',weight:2},
    item_5: {name:'eee',weight:0},
    item_3: {name:'ccc',weight:3},
    item_6: {name:'ccc',weight:23},
    item_4: {name:'eee',weight:1},
}

function buildItem(item, key) {
    var newItem = { key: key };
    newItem[key] = item;
    return newItem;
}

function byWeight(item) {
    return item[item.key].weight;
}

var arr = _(obj).map(buildItem).sortBy(byWeight).value();
console.log(arr);