2017-06-12 50 views
0

创建单个对象我有两个相同长度的阵列使用两个阵列

ids = [123, 456, 789, ...., 999]; 
names = ['foo', 'bar', ... , 'zzz']; 

我想创建像

[ {id: 123, name: 'foo'}, {id: 123, name: 'bar'}, ..., {id: 999, name: 'zzz'} ] 

我试图避免forEach如果可能的数组。

有什么建议吗?

回答

2

map好吗?

ids = [123, 456, 789, 999]; 
 
names = ['foo', 'bar', 'baz', 'zzz']; 
 

 
result = ids.map(function(_, i) { 
 
    return {id: ids[i], name: names[i]} 
 
}); 
 

 
console.log(result)

+0

这次是或多或少我的回答也是如此。只是想为OP添加一个免责声明,即使用两个独立数组,可能会出现一个数组与另一个数组的长度不相等的情况,在这种情况下,您最终可能不会将每个数组创建为文字,或者更糟糕,'ids'数组比'names'有更多的元素,这会导致索引超出范围的错误。 –

0

如果你不希望使用任何高阶函数,那么就这样做:

var objects = []; 
for (var i = 0; i < ids.length; i++) { 
    objects.push({id: ids[i], name: names[i]}); 
} 
0

无需forEach这里。使用map,与forEach类似。

var ids = [123, 456, 999]; 
 
var names = ['foo', 'bar', 'zzz']; 
 

 
var result = ids.map(function (currentId, index) { 
 
    return { 
 
    id: currentId, 
 
    name: names[index] 
 
    }; 
 
}); 
 

 
console.log(result);

forEach版本是这样的(注意,他们是多么相似):

var ids = [123, 456, 999]; 
 
var names = ['foo', 'bar', 'zzz']; 
 

 
var result = []; 
 
ids.forEach(function(currentId, index) { 
 
    result.push({ 
 
    id: currentId, 
 
    name: names[index] 
 
    }); 
 
}); 
 

 
console.log(result);

0

下面的代码使用foreach但你不需要来处理它。我希望这会对你有用。

ids = [123, 456, 789, 999]; 
 
    names = ['foo', 'bar', 'zab', 'zzz']; 
 
    
 
    result = ids.map(function(_, i) { 
 
     return {id: ids[i], name: names[i]} 
 
    }); 
 
    
 
    console.log(result)