比较值,并添加如果匹配到一个数组
我试图合并2个数据源在1,我想通过它们循环,如果specefic值匹配比添加到第一个对象具有相同的值,并添加在emty数组已经存在。不管我有多少物体。比较值,并添加如果匹配到一个数组
所以可以说我有这个信息
源1
one = {
"teams": [
{
name: 'ABC',
members: [],
rooms: '0'
},
{
name: 'DEF',
members: [],
rooms: '1'
}
]
}
源2
two = {
"persons": [
{
name: 'Foo',
gender: 'male',
room: '1'
},
{
name: 'Bar',
gender: 'female',
room: '2'
}
]
}
而我想的是,“人”阵列合并到成员数组,如果'房间和房间'的价值相匹配。
我会承担什么是类似这样的:
for(var i = 0 ; i < two.persons.length; i++) {
if (one.teams[i].rooms == two.persons[i].room) {
data.teams[i].members.push(two.persons[i]);
}
}
,你可以这样做:
one = {
"teams": [
{
name: 'ABC',
members: [],
rooms: '0'
},
{
name: 'DEF',
members: [],
rooms: '1'
}
]
};
two = {
"persons": [
{
name: 'Foo',
gender: 'male',
room: '1'
},
{
name: 'Bar',
gender: 'female',
room: '2'
}
]
};
var ttt = one.teams.map(function(x){
var roomVal= x.rooms;
x.members = two.persons.filter(function(t){
return t.room == roomVal});
return x;
})
one.teams = ttt;
console.log(one)
作品完美的我想要的 – Dennis
与您的代码的问题是,一旦你遍历two
阵列,那么你不回去,看看前面的元素与匹配目前的一个。
例如,如果[0]
每个阵列不匹配,你在for循环遍历索引[1]
,你没有办法检查是否two[1]
匹配one[0]
。
做一个完整的搜索,你可以直接遍历数组为two
每个值:使用高阶方法
two.persons.forEach(function(person) {
one.teams.forEach(function(team) {
if (team.rooms == person.room) {
team.members.push(person);
}
});
});
感谢您的解释,完美的作品 – Dennis
有很多策略可以做到这一点。但最重要的是你应该分别迭代每个数组。我会使用Array.forEach();
one.teams.forEach(function (team, teamsIndex, teamsArray) {
two.persons.forEach(function (person, personsIndex, personsArray) {
if (team.room == person.room) {
// Do what you need to do.
}
});
});
未检查语法,因此请注意阅读Array.forEach();文档。
你需要至少两个独立的循环 –
哪里需要另一个循环,在那个已经存在的循环中? – Dennis
@ DennisWegereef类似[this](http://jsfiddle.net/danield770/zf15qdvL/)(看看控制台输出) – Danield