[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сравнение объектов из колекций по свойству
chee
Сейчас делаю так

var lol = function (objects, objects2) {
$.each(objects, function (index, object) {
$.each(objects2, function (index2, object2) {
if (object.id == object2.id) {
object.selected = object2.selected;
}
}
);
});
}

lol(settings.users, getState('users'));

Как можно проще и правильней?

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
ohmy.gif

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
vital
$.map()
удобнее было б не?

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
chee
vital, пример в студию smile.gif


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
vital
Цитата (chee @ 16.12.2014 - 20:25)
vital, пример в студию  :)

Ну навскиду, если уж юзать джкверю то на полную

var arr2 = [{id:1,foo:'bar', selected:false},{id:2, foo:'baz', selected:true}];
var arr = [{id:1,foo:'bar', selected:null},{id:2, foo:'baz', selected:null}];
console.log(arr)
$.map(arr, function(item){
item.selected = $.grep(arr2, function(item2){
return item2.id == item.id;
})[0].selected;
});
console.log(arr);


_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
vital
Вместо явных циклов чуть больше сахара. Хз как оно быстрее работать будет, но выглядит умнее :)
Но если честно я бы просто написал 2 for-а обычных, с brake-ом внутри. Нафиг нужны все эти оболочки для мелких циклов типа этого? лишнее же. Причем будут лишние итерации цикла, как не пиши.

var arr2 = [{id:1,foo:'bar', selected:false},{id:2, foo:'baz', selected:true}];
var arr = [{id:1,foo:'bar', selected:null},{id:2, foo:'baz', selected:null}];
var found = false;
for (var i=0;i<arr.length;i++){
for (var j=0;j<arr2.length;j++){
if (arr[i].id==arr2[j].id){
arr[i].selected = arr2[j].selected;
break; //спасет от лишних итераций!!! чего нет во всех других способах
}
}
}

console.log(arr);

Ну и еще, если браузеры целевые посовременнее, то $.grep можно заменить нативным нынче array.filter(), a $.map-> array.forEach();
var arr2 = [{id:1,foo:'bar', selected:false},{id:2, foo:'baz', selected:true}];
var arr = [{id:1,foo:'bar', selected:null},{id:2, foo:'baz', selected:null}];
arr.forEach(function(item){
item.selected = arr2.filter(function(item2){
return item2.id == item.id;
})[0].selected;

});
console.log(arr);


_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.