如何映射嵌入式对象数组?

时间:2018-01-19 11:12:18

标签: javascript arrays json object meteor

我有这个数组:

var arrayData = 

[ { "A" : {
            "score" : 37.91,
            "color": "red"
          }
  },
  { "B" : {
            "score" : 77.11,
            "color": "green"
          }
  },
  { "C" : {
            "score" : 45.35,
            "color": "blue"
          }
  } ]

我需要将arrayData映射到值为"score""color"的单个数组中。 arrayData也可以具有不仅仅是A,B,C(例如A,B,C,D,E ......)。

所以我需要:

arrayScores = [37.91, 77.11, 45.35]
arrayColors = ["red", "green", "blue"]

我正在使用Meteor。我怎么能实现这一目标? 非常感谢。

3 个答案:

答案 0 :(得分:4)

如果保证每个内部对象只有一个键,则可以执行以下操作:

arrayScores = arrayData.map((item)=>(Object.values(item)[0].score));
arrayColors = arrayData.map((item)=>(Object.values(item)[0].color));

答案 1 :(得分:1)



var data = [ { "A" : {
            "score" : 37.91,
            "color": "red"
          }
  },
  { "B" : {
            "score" : 77.11,
            "color": "green"
          }
  },
  { "C" : {
            "score" : 45.35,
            "color": "blue"
          }
  } ]
  
 var result = data.reduce((acc, item) => {
     Object.keys(item).map((elem) =>{ 
     acc[0].push(item[elem].score);
     acc[1].push(item[elem].color);
     })
     return acc;
}, [[], []]);

arrayScore = result[0];
arrayColor = result[1];
console.log(result);




答案 2 :(得分:1)

这是一个非常简单的问题,我向您推荐,请在发布问题之前参考javascript核心功能。



var arrayData = 

[ { "A" : {
            "score" : 37.91,
            "color": "red"
          }
  },
  { "B" : {
            "score" : 77.11,
            "color": "green"
          }
  },
  { "C" : {
            "score" : 45.35,
            "color": "blue"
          }
  } ]
  
  var arrScores = [], arrColors = [];
  for(var index=0; index<arrayData.length; index++){
  		var objVal = Object.values(arrayData[index]);
      if(!!objVal && !!objVal[0] && !!objVal[0].score){
        arrScores.push(objVal[0].score);
      }
      if(!!objVal && !!objVal[0] && !!objVal[0].color){
        arrColors.push(objVal[0].color);
      }
  }
  
  console.log(arrScores);
  console.log(arrColors);
&#13;
&#13;
&#13;