Объекты в массиве
Помогите разобраться в вопросе. Есть 2 массива из объектов (формат JSON). Один из массивов - обновлённая версия другого. Если конкретнее, то нужно сравнить старый и новый файл, и отобрать порядковые номера в новом массиве тех объектов, которых нет в старом. В объектах уникальным свойством является "id". Пример старого массива
[{"name":"Иван","id":"1234_SEPT_2014","country":"Москва"}, {"name":"Василий","id":"634_DES_2014","country":"Сочи"}]
И новый массив
[{"name":"Иван","id":"1234_SEPT_2014","country":"Москва"}, {"name":"Дмитрий","id":"4757_DES_2015","country":"Питер"}, {"name":"Василий","id":"634_DES_2014","country":"Сочи"}]
На выходе необходимо получить список с номерами элементов (объектов), которых нет в старом варианте. В данном случае [1]. Заранее спасибо. |
Точнее на выходе необходимо получить массив из объектов, которых нет в старом массиве.
|
Winni,
function fn(c, b) {
for (var d = [], e = {}, a = 0; a < c.length; a++) e[c[a].id] = !0;
for (a = 0; a < b.length; a++) !e[b[a].id] && d.push(b[a]);
return d
};
var old = [{"name":"Иван","id":"1234_SEPT_2014","country":"Москва"}, {"name":"Василий","id":"634_DES_2014","country":"Сочи"}],
current = [{"name":"Иван","id":"1234_SEPT_2014","country":"Москва"}, {"name":"Дмитрий","id":"4757_DES_2015","country":"Питер"}, {"name":"Василий","id":"634_DES_2014","country":"Сочи"}];
alert(JSON.stringify(fn(old, current)));
|
Благодарю.
|
рони, Подскажи, пожалуйста, ещё в таком моменте.
Допустим, есть массив
var array = [{"name":"Иван","friends":[{"name":"Дмитрий"},{"name":"Сергей"}]}]
Если я обращаюсь к несуществующему свойству объекта или несуществующему объекту, получаю undefined, например console.log(array[0].country) console.log(array[0].friends[3]) Но если я обращаюсь к свойству несуществующего объекта, то выполнение скрипта прерывается и получаю ошибку "Uncaught TypeError: Cannot read property 'image' of undefined", например console.log(array[0].friends[3].image) Как обойти эту ошибку и продолжить выполнение скрипта? Пробовал разного рода условия, не помогает console.log(array[0].friends[3].image || 'def') |
Winni,
проверяют всю цепочку var test = var[0] && var[0].friends && var[0].friends[3] && var[0].friends[3].image ? var[0].friends[3].image : 'def'; примерно так |
Спасибо.
|
Возможно ли с помощью цикла пройтись по всем объектам массива (пример ниже) и создать переменные (называться должны как свойство 'id'), присвоив им соответствующий объект.
[{"name":"Иван","id":"SEPT_2014","country":"Москва"}, {"name":"Василий","id":"DES_2015","country":"Сочи"}]
В результате должно получиться
var SEPT_2014 = {"name":"Иван","id":"SEPT_2014","country":"Москва"}
|
Winni,
можно но переменные будут глобальными window[arr[i]["id"]]= arr[i] |
Спасибо. Как раз то, что нужно.
|
| Часовой пояс GMT +3, время: 16:45. |