Как отсортировать массив объектов JavaScript по свойству вложенного объекта?

Возможно, Вы интересуетесь AqiStar. TextBox ( http://aqistar-textbox.software.informer.com ).

Это - управление текстовым редактором подсветки синтаксиса, предназначающееся для WPF, быстрого и простого в использовании, но не свободное.

28
задан VerizonW 22 February 2011 в 03:48
поделиться

2 ответа

Вы можете использовать Agile.js для такого рода вещей.
На самом деле вы передаете выражение вместо обратного вызова, оно обрабатывает вложенные свойства и выражение javascript очень приятным способом.

Использование: _.orderBy(array, expression/callback, reverse[optional])

Пример:

var orders = [
  { product: { price: 91.12, id: 1 }, date: new Date('01/01/2014') },
  { product: { price: 79.21, id: 2 }, date: new Date('01/01/2014') },
  { product: { price: 99.90, id: 3 }, date: new Date('01/01/2013') },
  { product: { price: 19.99, id: 4 }, date: new Date('01/01/1970') }
];

_.orderBy(orders, 'product.price');
// →  [orders[3], orders[1], orders[0], orders[2]]

_.orderBy(orders, '-product.price');
// → [orders[2], orders[0], orders[1], orders[3]]
3
ответ дан 28 November 2019 в 03:30
поделиться

Если у вас есть массив объектов, таких как

const objs = [{
        first_nom: 'Lazslo',
        last_nom: 'Jamf',
        moreDetails: {
            age: 20
        }
    }, {
        first_nom: 'Pig',
        last_nom: 'Bodine',
        moreDetails: {
            age: 21
        }
    }, {
        first_nom: 'Pirate',
        last_nom: 'Prentice',
        moreDetails: {
            age: 22
        }
    }];

, вы можете просто использовать

nestedSort = (prop1, prop2 = null, direction = 'asc') => (e1, e2) => {
        const a = prop2 ? e1[prop1][prop2] : e1[prop1],
            b = prop2 ? e2[prop1][prop2] : e2[prop1],
            sortOrder = direction === "asc" ? 1 : -1
        return (a < b) ? -sortOrder : (a > b) ? sortOrder : 0;
    }

и называть его

для прямых объектов

objs.sort(nestedSort("last_nom"));
objs.sort(nestedSort("last_nom", null, "desc"));

для вложенных объектов

objs.sort(nestedSort("moreDetails", "age"));
objs.sort(nestedSort("moreDetails", "age", "desc"));
1
ответ дан 28 November 2019 в 03:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: