Ser*_*rge 2 javascript arrays object
var myIds = [3, 4, 2];
var myObj = [
{id:1, name:'one'},
{id:2, name:'two'},
{id:3, name:'tree'},
{id:4, name:'four'}];
// need to obtain ['tree', 'four', 'two']
var idsToNames= function(ids, objects) {
var myNames = myIds.map(function(id){
// transform id to name
foreach(o in objects){
if (i.id == id)
return o.name;
}
});
return myNames;
}
Run Code Online (Sandbox Code Playgroud)
它是将id数组转换为名称数组的最佳方法吗?
首先像这样转换你的对象
var newMyObj = myObj.reduce(function(result, currentObject) {
result[currentObject.id] = currentObject.name;
return result;
}, {});
console.log(newMyObj);
// { '1': 'one', '2': 'two', '3': 'three', '4': 'four' }
Run Code Online (Sandbox Code Playgroud)
您实际上可以newMyObj通过迭代数组来创建myObj,就像这样
var newMyObj = {};
for (var i = 0; i < myObj.length; i += 1) {
newMyObj[myObj[i].id] = myObj[i].name;
}
Run Code Online (Sandbox Code Playgroud)
现在,你可以简单地重复myIds,并挑选值从newMyObj,像这样
console.log(myIds.map(function(id) { return newMyObj[id]; }));
// [ 'three', 'four', 'two' ]
Run Code Online (Sandbox Code Playgroud)
如果您的环境支持ECMAScript 2015的Arrow功能,则可以简洁地编写
console.log(myIds.map((id) => newMyObj[id]));
// [ 'three', 'four', 'two' ]
Run Code Online (Sandbox Code Playgroud)
通过将原始内容转换myObj为newMyObj您将获得恒定的时间查找.否则你必须myObj为每个元素迭代数组,myIds并且运行时复杂度将变为O(n*m).
| 归档时间: |
|
| 查看次数: |
1226 次 |
| 最近记录: |