Здесь - это страница расширения JQuery.
Я ожидал бы, что это возьмет два массива, соединит их вместе и создаст одинаковые свойства для каждого полученного элемента массива. Как мне заставить это работать как ожидалось?
var a = [];
a.push({ "id": 1, "text": "one" });
a.push({ "id": 2, "text": "two" });
a.push({ "id": 3, "text": "three" });
var b = [];
b.push({"id":3 , "selected":true});
var c = [];
$.extend(c,a,b);
Я ожидаю, что результирующий массив будет содержать:
{ "id": 1, "text": "one", "selected": false }
{ "id": 2, "text": "two", "selected": false }
{ "id": 3, "text": "three", "selected": true }
но вместо этого кажется, что он просто копирует первый массив поверх второго:
{ "id": 3, "text": null, "selected": true }
{ "id": 2, "text": "two" }
{ "id": 3, "text": "three" }
Документация включает в себя:
Когда мы предоставляем два или более объектов в $ .extend (), свойства всех объектов добавляются к целевому объекту.
Что я делаю не так или как бы я поступил иначе?
РЕДАКТИРОВАТЬ: Реализация предложения Jball:
var a = [];
a.push({ "id": 1, "text": "one" });
a.push({ "id": 2, "text": "two" });
a.push({ "id": 3, "text": "three" });
var b = [];
b.push({ "id": 3, "selected": true });
var c = [];
for (var index = 0; index < a.length; index++) {
var tempresult = {};
var tempb = b.filter(
function (ele, idx, collection) {
return (collection[idx].id == index + 1);
});
if (tempb.length == 0)
tempb = [{ "id": index + 1, "selected": false }];
$.extend(tempresult, a[index], tempb[0]);
c.push(tempresult);
}
производит:
[{"id":1, "selected":false, "text": "one"},
{"id":2, "selected":false, "text": "two"},
{"id":3, "selected":true, "text": "three"}]
Это ответ. Теперь мне интересно, можно ли его немного почистить.