2017-01-28 11 views
0

У меня есть массив, подобный приведенному ниже, и я пытаюсь сортировать элементы в массиве по его цене с помощью lodash, но я не вижу, чтобы он работал. Пожалуйста, дайте мне знать, что здесь не так, согласно документации lodash, он примет массив и должен вернуть отсортированный массив.Как отсортировать с помощью Lodash sortBy?

Мои данные

var items= [ 
    { 
    "total": 11, 
    "productGroup": { 
     "_id": "5834754f0acc770ce14b1378", 
     "name": "Auto Biography", 
     "description": "Yum", 
     "type": "book" 
    },  
    "_id": "58791af46c698c00475e7f41",  
    "price": 200, 
    "sold": 0 
    }, 
    { 
    "total": 11, 
    "productGroup": { 
     "_id": "5834754f0acc770ce14b1378", 
     "name": "Science Fiction", 
     "description": "Yum", 
     "type": "book" 
    },  
    "_id": "58791af46c698c00475e7f41",  
    "price": 120, 
    "sold": 0 
    }, 
    { 
    "total": 11, 
    "productGroup": { 
     "_id": "5834754f0acc770ce14b1378", 
     "name": "Language", 
     "description": "Yum", 
     "type": "book" 
    },  
    "_id": "58791af46c698c00475e7f41",  
    "price": 125, 
    "sold": 0 
    }, 
    { 
    "total": 11, 
    "productGroup": { 
     "_id": "5834754f0acc770ce14b1378", 
     "name": "Fiction", 
     "description": "Yum", 
     "type": "book" 
    },  
    "_id": "58791af46c698c00475e7f41",  
    "price": 300, 
    "sold": 0 
    } 
] 

Сортировать Код

items = _.sortBy(items, item=>{return item.price}); 
+0

Что он делает вместо этого? – Soviut

+0

Какую версию lodash вы используете? – Soviut

ответ

1

Согласно source code, второй аргумент должен быть массивом iteratees. Чтобы устранить проблему, вам нужно поместить анонимную функцию внутри массива, например.

items = _.sortBy(items, [item=>{return item.price}]); 
+2

Пожалуйста, разверните этот ответ, чтобы показать пример правильной реализации. – Soviut

+0

Спасибо за ответ всем, но, к сожалению, даже после изменения моего кода, как указано выше, он все еще не возвращает отсортированный массив, он возвращает мне массив, как есть. –

2

Скорее всего, вы используете более старую версию Lodash. Он работает с 4.17.2, как показано ниже.

var items = [ 
 
    { 
 
    "_id": "58791af46c698c00475e7f41",  
 
    "price": 200 
 
    }, 
 
    { 
 
    "_id": "58791af46c698c00475e7f41",  
 
    "price": 120 
 
    }, 
 
    { 
 
    "_id": "58791af46c698c00475e7f41",  
 
    "price": 125 
 
    }, 
 
    { 
 
    "_id": "58791af46c698c00475e7f41",  
 
    "price": 300 
 
    } 
 
]; 
 

 
var results = _.sortBy(items, item => item.price); 
 
console.log(results);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>

+0

@ruakh спасибо, я обновил ответ, включив его в это сообщение. – Soviut

+0

Я обновил свой ответ, включив в него рабочий фрагмент. Скорее всего, это версия lodash. – Soviut