【问题标题】:How to merge two arrays into an object where values are assigned to names?如何将两个数组合并为一个对象,其中值被分配给名称?
【发布时间】:2017-05-22 11:37:54
【问题描述】:

我的两个数组是:

const values = ['Master Clean', '45', '650']
const names = ['servicemenus.$.name', 'servicemenus.$.duration', 'servicemenus.$.cost']

结果应该是这样的:

{ 'servicemenus.$.name':'Master Clean',  'servicemenus.$.duration': '45', 'servicemenus.$.cost': 650}

【问题讨论】:

  • 你试过什么?您是否尝试过使用 for 循环迭代其中一个数组?

标签: javascript arrays mongodb


【解决方案1】:

因为我认为您知道这两个数组需要始终保持相同的长度。这个for 循环可以帮助你:

const values = ['Master Clean', '45', '650']
const names = ['servicemenus.$.name', 'servicemenus.$.duration', 'servicemenus.$.cost']
var obj = {}
for (var i = 0; i < names.length; i++) {
  //or check with: if (values.length > i) { assignment }
  obj[names[i]] = values[i];
}
console.log(obj);

输出将是这样的: Object { servicemenus.$.name: "Master Clean", servicemenus.$.duration: "45", servicemenus.$.cost: "650" }

为了完成,我发现这个问题也可以帮助你:Merge two arrays into one Json object

【讨论】:

    【解决方案2】:

    您可以使用forEach 中的数组索引来引用另一个并动态构建对象键:

    const values = ['Master Clean', '45', '650']
    const names = ['servicemenus.$.name', 'servicemenus.$.duration', 'servicemenus.$.cost']
    
    let update = { };
    
    names.forEach( (name,idx) => {
      update[name] = values[idx];
    });
    

    这会给你结果

    【讨论】:

      【解决方案3】:

      假设这两个数组的长度总是相等的,我们可以使用其中一个作为我们构建对象的循环的基础:

      let resultingObject = {};
      names.forEach((name, i) => {
          resultingObject[name] = values[i];
      });
      
      console.log(resultingObject);
      

      【讨论】:

        【解决方案4】:

        您可以将数组reduce 转换为单个值(在您的情况下为object)。 Reduce 函数接受累加器、当前值和 index,您可以使用它们来引用第二个数组中的值。 Object.assign 用你的键/值构造一个对象。

        const values = ['Master Clean', '45', '650'];
        const names = ['servicemenus.$.name', 'servicemenus.$.duration', 'servicemenus.$.cost'];
        
        const res = names.reduce((acc, cur, i) => Object.assign(acc, {[cur]: values[i]}), {});
        
        console.log(res)

        【讨论】:

          【解决方案5】:

          用 for in 循环遍历对象属性并为其分配新对象

          var newobj = {};
          for( var i in names){
          newobj[names[i]] = values[i];
          }
          console.log(newobj);
          

          【讨论】:

            猜你喜欢
            • 2022-01-20
            • 1970-01-01
            • 1970-01-01
            • 2019-07-04
            • 2018-06-08
            • 2021-01-18
            • 1970-01-01
            • 1970-01-01
            • 2021-07-13
            相关资源
            最近更新 更多