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;
}
这是将id数组转换为name数组的最佳方法吗?
首先像这样转换对象
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' }
实际上,你可以创建newMyObj
通过遍历数组myObj
,这样也
var newMyObj = {};
for (var i = 0; i < myObj.length; i += 1) {
newMyObj[myObj[i].id] = myObj[i].name;
}
现在,您可以像这样简单地迭代myIds
并选择的值newMyObj
console.log(myIds.map(function(id) { return newMyObj[id]; }));
// [ 'three', 'four', 'two' ]
如果您的环境支持ECMAScript 2015的Arrow函数,则可以简写为
console.log(myIds.map((id) => newMyObj[id]));
// [ 'three', 'four', 'two' ]
通过将原始图像转换为原始图像myObj
,newMyObj
您将获得恒定的时间查找。否则,您必须myObj
为中的每个元素迭代数组,myIds
并且运行时复杂度将变为O(n * m)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句