【问题标题】:Convert 2 arrays into key value object javascript将2个数组转换为键值对象javascript
【发布时间】:2020-03-27 11:50:09
【问题描述】:

我有一个带有标题的数组 - 比如["language", "name", "code"] 和一组值数组 - 例如 [["English", "Matt", "2D"], ["Croatian", "Dana", "8S"], ["Russian", "Ivan", "2W"]].

我正在尝试获取对象数组,如下所示:

[ 
  {language: English, name: Matt, code: 2D}, 
  {language: Croatian, name: Dana, code: 8S}, 
  {language: Russian, name: Ivan, code: 2W} 
]

没有嵌套 for 循环的任何优雅方法?

【问题讨论】:

  • arr.map(values => Object.fromEntries(_.zip(headers, values)))
  • 嵌套循环有什么问题?它不会比这更有效。

标签: javascript multidimensional-array ecmascript-6


【解决方案1】:

let props=["language", "name", "code"];
let data=[["English", "Matt", "2D"], ["Croatian", "Dana", "8S"], ["Russian", "Ivan", "2W"]];
let result=data.map( (innerArray) =>{let obj={};innerArray.forEach( (innerData,index) =>{obj[props[index]]=innerData;});return obj;
});
console.log(result);

【讨论】:

    【解决方案2】:
    const props = ["language", "name", "code"];
    const values = [["English", "Matt", "2D"], ["Croatian", "Dana", "8S"], ["Russian", "Ivan", "2W"]];
    const formatted = values.map(value => ({
      [props[0]]: value[0],
      [props[1]]: value[1],
      [props[2]]: value[2],
    }));
    

    或者像这样:

    const formatted4 = values.map(value => {
      let v = {};
      props.forEach((prop, i) => {
        v = {
          ...v,
          [prop]: value[i]
        }
      });
      return v;
    });
    

    【讨论】:

      【解决方案3】:

      如果数据数量不变,您可以使用 ES6* 轻松创建它

      var dataList = [["English", "Matt", "2D"], ["Croatian", "Dana", "8S"], ["Russian", "Ivan", "2W"]];
          let myList = [];
          for([language, name, code] of dataList)
            myList.push({language, name, code});
          console.log(myList);
      

      【讨论】:

        【解决方案4】:

        您可以使用array destructuring(假设您确定您的数据格式保持不变):

        const newArr = [];
        for(const [language, name, code] of yourDataArray){
          //do whatever you want with the variables language, name, code
          newArr.push({
            language: language,
            name: name,
            code: code
          })
        }
        

        【讨论】:

        • Object.fromEntries() 是如何在上面的代码中发挥作用的?
        • @Cipriana 你是对的,它没有。我只记得Object.fromEntries() 接受一个可迭代数组。我忘记了它们应该是不适用于您的情况的键值对
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        相关资源
        最近更新 更多