【问题标题】:Combining arrays from dictionary in Javascript在Javascript中组合字典中的数组
【发布时间】:2021-03-25 13:07:04
【问题描述】:

我有以下结构:

ley objects = {
   key1: [1, 2, 3],
   key2: [3,4,6],
   key3: [5, 6, 7],
}

如何合并这些数组以保留任何重复项,以便获得[1, 2, 3, 3, 4, 6, 6, 6, 7]?我已经尝试过concat,但我似乎找不到这样做的方法。我有更多的键,所以它必须是一些循环:

到目前为止我的尝试:

let arr = []
for(const [key, value] of Object.entries(objects)){ 
    arr.concat(value);
}

有没有办法避免这个循环?

【问题讨论】:

标签: javascript


【解决方案1】:

您可以将数组中的值变平。

let object = { key1: [1, 2, 3], key2: [3, 4, 6], key3: [5, 6, 7] },
    result = Object.values(object).flat();

console.log(result);

【讨论】:

  • 真的很棒的答案
【解决方案2】:

你可以使用 ES6 spread 语法。

const obj = {
  key1: [1, 2, 3],
  key2: [3, 4, 6],
};

const result = [...obj.key1, ...obj.key2];
console.log(result);

【讨论】:

    【解决方案3】:

    在这种情况下,我会将Array.prototype.flat()Object.values() 结合使用:

    const obj = {
      key1: [1, 2, 3],
      key2: [3, 4, 6],
    };
    
    const result = Object.values(obj).flat();
    console.log(result);

    【讨论】:

    • 这和上面尼娜的回答一样。
    【解决方案4】:

    您可以使用Array.prototype.concat(),Array.prototype.reduce() and Object.values()

    const obj = {
        key1: [1, 2, 3],
        key2: [3, 4, 6],
        key3: [5, 6, 7]
    };
    
    const result = Object.values(obj).reduce((acc, item) => acc.concat(item), []);
    console.log(result);

    【讨论】:

      【解决方案5】:

      我假设您不仅要合并数组,还要根据输出对它们进行排序。在这种情况下,您可以遍历这些键并将它们推送到一个数组中。之后,您可以按值对它们进行排序。

      const obj = {
         key1: [1, 2, 3],
         key2: [3,4,6]
      };
      
      const unsorted = Object.keys(obj).reduce((acc, key) => {
        acc.push(...obj[key]);
        return acc;
      }, []);
      
      const sorted = [...unsorted].sort((a, b) => a - b);
      
      console.log(sorted);

      【讨论】:

      • .sort() 没有比较器将作为字符串排序。这意味着[1, 2, 10].sort()[1, 10, 2]
      • @VLAZ 不错。它应该有一个值比较器。
      【解决方案6】:

      这也行

          let objects = {
         key1: [1, 2, 3],
         key2: [3,4,6],
         key3: [5, 6, 7],
      }
              result = Object.values(objects).join();
      
      console.log(result);

      【讨论】:

        猜你喜欢
        • 2018-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多