簡體   English   中英

遍歷對象並將其設置為第二個對象中的值javascript

[英]Looping through object and setting as values in second object javascript

我有一個數組,它必須是我對象中的鍵。 我還有一個具有相同鍵和默認屬性的對象,我需要將其設置為要構建的對象中鍵的值。 我被困在如何循環和設置空對象中的鍵/值。 謝謝!!

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
}
var myFinalObj = myArray.reduce((memo, name) => { 
  memo[name] = startingObj[name].default 
  return memo 
}, {})

MDN報價:

reduce()方法對一個累加器應用一個函數,該數組的每個值(從左到右)將其減小為單個值。

箭頭功能是javascript的最新 功能 ,如果您的環境不支持它們,則可以使用更詳細但等效的功能:

 var myFinalObj = myArray.reduce(function(memo, name) { 
  memo[name] = startingObj[name].default 
  return memo 
}, {})

對於IE <9,縮減功能也不可用,但是您可以使用同一MDN文章中可用的polyfill

 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']; } 

您可以使用obj["key"]=value語法設置屬性鍵,因此應該可以:

var myFinalObject={};
for(var i=0;i<myArray.length;i++){
    myFinalObj[myArray[i]]=startingObj[myArray[i]];
}

建議使用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); 

嘗試這個:

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
    }
}
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);

使用以下簡單代碼:

var myFinalObj = {};
myArray.forEach(function(key){
    myFinalObj[key] = startingObj[key].default;
});
console.log(myFinalObj)

這是您要做什么? 根據上面列出的測試用例,它似乎可以正常工作。

  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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM