#javascript #underscore.js
#javascript #underscore.js
Вопрос:
У меня есть массив, который выглядит следующим образом —
list = [{"doc":{"id": "123", "name":"abc"}}, {"doc":{"id": "345", "name":"xyz"}},{"doc":{"id": "123", "name":"str"}}]
Как я могу использовать метод _.each для извлечения объекта doc с id =»123″? Любая помощь приветствуется.
Приветствия!
Комментарии:
1.
_.each
из Underscore.js , не из jQuery…
Ответ №1:
На самом деле, _.detect была бы более подходящей функцией для решения этой проблемы:
var list = [
{"doc":{"id": "123", "name":"abc"}},
{"doc":{"id": "345", "name":"xyz"}},
{"doc":{"id": "123", "name":"str"}}
];
_.detect(list, function (obj) {return obj.doc.id === "123"});
Результат:
{"doc":{"id": "123", "name":"abc"}}
В качестве альтернативы, если вы хотите вернуть оба объекта с id = ‘123’ , вы можете заменить _.detect на _.select .
_.select(list, function (obj) {return obj.doc.id === "123"});
Результат:
[{"doc":{"id": "123", "name":"abc"}}, {"doc":{"id": "123", "name":"str"}}]
Комментарии:
1. Отличный ответ! Отлично справляется с задачей!
2. Что, если вы хотите, чтобы вместо возвращаемого объекта возвращался индекс?
Ответ №2:
Прочитайте о том, как работает jQuery.каждый обрабатывает разрыв;
var object_with_id_123;
$.each(list, function(key, val){
if (val.doc.id == "123") {
object_with_id_123 = val;
return false; // break;
}
return true; // continue; - just to satisfy jsLint
});
console.log(object_with_id_123);
Ответ №3:
var list = [{"doc":{"id": "123", "name":"abc"}}, {"doc":{"id": "345", "name":"xyz"}},{"doc":{"id": "123", "name":"str"}}]
var olist = [];
$.each(list,function(key, value){
if(value.doc.id =="123"){
olist.push(value);
}
})
$.each(olist,function(key, value){
alert(JSON.stringify(value))
})
Ответ №4:
поскольку у вас есть 2 результата с идентификатором 123, я добавил результат массива. Если у вас есть 1 результат, вы можете вернуть obj.doc вместо того, чтобы добавлять его в результат
var result = [];
$.each(list, function(index, obj) {
if(obj.doc.id == 123) {
result.push(obj.doc);
}
});