Привет.
Уже пол дня ломаю голову с такой аномалией в JS.
Есть исходный массив:
arr[arr.length] = {
"id": 22,
"category": 34,
"name": "Jel",
"movie": "Avatar"
};
arr[arr.length] = {
"id": 34,
"category": 12,
"name": "Sali",
"movie": "Ted 2"
};
arr[arr.length] = {
"id": 33,
"category": 34,
"name": "Chesko",
"movie": "Avatar"
};
arr[arr.length] = {
"id": 22,
"category": 34,
"name": "Donny",
"movie": "Avatar"
};
У него уникальные значения, это id + movie.
Нужно из него сделать вот такой:
[{
"id": 22,
"movie": "Avatar",
"actors": [{
"category": 34,
"name": "Jet"
}, {
"category": 34,
"name": "Donny"
}]
},
{
"id": 34,
"movie": "Ted 2",
"actors": [{
"category": 12,
"name": "Sali"
}]
},
{
"id": 33,
"movie": "Avatar",
"actors": [{
"category": 34,
"name": "Chesko"
}]
}]
Написал код:
var arr = [],
movies = [];
arr[arr.length] = {
"id": 22,
"category": 34,
"name": "Jel",
"movie": "Avatar"
};
arr[arr.length] = {
"id": 34,
"category": 12,
"name": "Sali",
"movie": "Ted 2"
};
arr[arr.length] = {
"id": 33,
"category": 34,
"name": "Chesko",
"movie": "Avatar"
};
arr[arr.length] = {
"id": 22,
"category": 34,
"name": "Donny",
"movie": "Avatar"
};
for (var i = 0; i < arr.length; i++) {
var id = arr[i].id + '_' + arr[i].movie;
movies[id] = {
"id": arr[i].id,
"movie": arr[i].movie
}
if (!movies[id].actors) movies[id].actors = []
movies[id].actors[movies[id].actors.length] = {
"category": arr[i].category,
"name": arr[i].name,
}
}
console.log(movies);
https://jsfiddle.net/52ubh0tg/
Но он как-то аномально работает, он не увеличивает movies[id].actors[movies[id].actors.length], и все время считает что movies[id].actors пустой массив. В итоге у Avatar с id 22 только один актер, а не два.