我有一个数组,它需要是我对象中的键。我还有一个具有相同键和默认属性的对象,我需要将其设置为我需要构建的对象中的键的值。我坚持如何循环并设置空对象中的键/值。谢谢!
myFinalObj
以空对象开始。
我的起始对象
var startingObj = {
'one' : {'default': 1, 'name': 'un'},
'two' : {'default': 2, 'name': 'deux'},
'three': {'default': 3, 'name': 'trois'}
}
我的数组
var myArray = ['one', 'two', 'three'];
我完成的对象
var myFinalObj = {
'one' : 1,
'two' : 2,
'three' : 3
}
答案 0 :(得分:2)
var myFinalObj = myArray.reduce((memo, name) => {
memo[name] = startingObj[name].default
return memo
}, {})
引自MDN:
reduce()方法对累加器和每个都应用一个函数 数组的值(从左到右)将其减少为单个 值。
Arrow functions是javascript的recent补充,如果你的环境does not support,你可以使用更详细但等效的内容:
var myFinalObj = myArray.reduce(function(memo, name) {
memo[name] = startingObj[name].default
return memo
}, {})
对于IE< 9减少功能也不可用,但您可以使用同一MDN article中提供的polyfill。
答案 1 :(得分:0)
var startingObj = {
'one': {
'default': 1,
'name': 'un'
},
'two': {
'default': 2,
'name': 'deux'
},
'three': {
'default': 3,
'name': 'trois'
}
}
var myArray = ['one', 'two', 'three'];
var finalObject = {};
myArray.forEach(function(value){
finalObject[value] = startingObject[value]['default'];
}
答案 2 :(得分:0)
您可以使用obj["key"]=value
语法设置属性键,因此这应该有效:
var myFinalObject={};
for(var i=0;i<myArray.length;i++){
myFinalObj[myArray[i]]=startingObj[myArray[i]];
}
答案 3 :(得分:0)
旧版浏览器可能不支持使用for(.. in ..)
或for (var i=0;i<..;i++)
作为Array.forEach
推荐。
var myArray = ['one', 'two', 'three'];
var startingObj = {
'one' : {'default': 1, 'name': 'un'},
'two' : {'default': 2, 'name': 'deux'},
'three': {'default': 3, 'name': 'trois'}
}
var myFinalObj = {};
for (key in myArray) {
myFinalObj[myArray[key]] = startingObj[myArray[key]].default;
}
console.log(myFinalObj);
答案 4 :(得分:0)
试试这个:
var startingObj = {
'one' : {'default': 1, 'name': 'un'},
'two' : {'default': 2, 'name': 'deux'},
'three': {'default': 3, 'name': 'trois'}
}
var myArray = ['one', 'two', 'three'];
var myFinalObj = {}
for(n in myArray){
if(startingObj.hasOwnProperty(myArray[n])){
myFinalObj[myArray[n]] = startingObj[myArray[n]].default
}
}
答案 5 :(得分:0)
function buildObj(startObj, keyArr, finalObj) {
var currKey;
for (var i = 0; i < keyArr.length; i++) {
currKey = keyArr[i];
finalObj[currKey] = startObj[currKey]['default'];
}
}
var myFinalObj = {};
buildObj(startingObj, myArray, myFinalObj);
答案 6 :(得分:0)
使用这个简单的代码:
var myFinalObj = {};
myArray.forEach(function(key){
myFinalObj[key] = startingObj[key].default;
});
console.log(myFinalObj)
答案 7 :(得分:0)
这是你想要做的吗?根据您上面列出的测试用例,它似乎有效。
var startingObj = {
'one' : {'default': 1, 'name': 'un'},
'two' : {'default': 2, 'name': 'deux'},
'three': {'default': 3, 'name': 'trois'}
}
var myArray = ['one', 'two', 'three'];
var return_Obj = {}
for (var i = 0; i < myArray.length; i++){
for (var key in startingObj){
if (key == myArray[i]){
var val = startingObj[key]['default']
break
}
}
return_Obj[myArray[i]] = val
}
console.log(return_Obj)