javascript - 无法在多维数组上应用扩展运算符

标签 javascript

我有一个多维数组,我想对其应用扩展运算符来获取一个没有重复值的数组。这是多维数组:

colorArray = [
['Bead Link Layered Anklet', 'Gold, Hematite'],
['Bead Link Layered Anklet', 'Gold, Multi, Neutral'],
['Bead Link Layered Anklet', 'Gold, Multi, Neon'],
['Bead Link Layered Anklet', 'Gold, Multi, Neon'],
['Colorful Beaded Anklet', 'Fuchsia, Gold'],
['Colorful Beaded Anklet', 'Yellow'],
['Rhinestone Pave Chain Layered Anklets','Gold Theme']
]

当我通过应用推送运算符压平数组时,它不再是多维数组,它看起来像这样:

colorArray = 
[
  'Bead Link Layered Anklet',
  'Gold, Hematite',
  'Bead Link Layered Anklet',
  'Gold, Multi, Neutral',
  'Bead Link Layered Anklet',
  'Gold, Multi, Neon',
  'Bead Link Layered Anklet',
  'Gold, Multi, Neon',
  'Colorful Beaded Anklet',
  'Fuchsia, Gold',
  'Colorful Beaded Anklet',
  'Yellow',
  'Rhinestone Pave Chain Layered Anklets',
  'Gold Theme '
]

我的问题是,如果数组是平的,我只能应用扩展运算符,但我想保留结构,所以我不想展平它。这是当我将扩展运算符应用于平面数组时得到的结果:

unique = 
[
  'Bead Link Layered Anklet',
  'Cream, Gold',
  'Gold, Hematite',
  'Gold, Multi, Neutral',
  'Gold, Multi, Neon',
  'Colorful Beaded Anklet',
  'Fuchsia, Gold',
  'Yellow',
  'Rhinestone Pave Chain Layered Anklets',
  'Gold Theme'
]

我希望结果如下所示:

['Bead Link Layered Anklet', ['Gold, Hematite', 'Gold, Multi, Neutral', 'Gold, Multi, Neon'],
['Colorful Beaded Anklet', ['Fuchsia, Gold', 'Yellow'],
['Rhinestone Pave Chain Layered Anklets','Gold Theme']

这是我用来消除重复项的方法:

unique = [...new Set(colorArray)];

最佳答案

基于this code :

var colorArray = [
  ['Bead Link Layered Anklet', 'Gold, Hematite'],
  ['Bead Link Layered Anklet', 'Gold, Multi, Neutral'],
  ['Bead Link Layered Anklet', 'Gold, Multi, Neon'],
  ['Bead Link Layered Anklet', 'Gold, Multi, Neon'],
  ['Colorful Beaded Anklet', 'Fuchsia, Gold'],
  ['Colorful Beaded Anklet', 'Yellow'],
  ['Rhinestone Pave Chain Layered Anklets', 'Gold Theme']
];

let result = [...Object.values(
  colorArray.reduce((acc, el) => {
    var key = el[0],
      value = el[1];
    acc[key] = acc[key] || {
      key,
      values: []
    };
    if (!acc[key].values.includes(value))
      acc[key].values.push(value);
    return acc;
  }, {})).map(el => [el.key, el.values])];

console.log(result);

关于javascript - 无法在多维数组上应用扩展运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61197391/

相关文章:

javascript - WebService 方法将 "undefined"返回给 javascript,即使它应该返回一个值

javascript - 如何在动态生成的mat-table中将字符串转换为类型日期

javascript - 是否可以在元素上找到委托(delegate)事件?

javascript - (可选)在对象中添加键

javascript - 获取背景图片的最终大小

javascript - Google Analytics 实时事件在页面加载时未触发

javascript - nicescroll 在页面滚动完成后激活滚动

javascript - 如何将同一类型的多个事件绑定(bind)到单个元素

javascript - Internet Explorer 7 8 : jQuery UI effects work only once

javascript - RactiveJS 动态添加子组件