循环对象并在第二个对象javascript中设置为值

时间:2015-11-20 19:01:01

标签: javascript arrays loops object

我有一个数组,它需要是我对象中的键。我还有一个具有相同键和默认属性的对象,我需要将其设置为我需要构建的对象中的键的值。我坚持如何循环并设置空对象中的键/值。谢谢!

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
}

8 个答案:

答案 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)