如何在多维数组上使用FILTER来检索唯一值?

问题描述 投票:0回答:4

我看过其他与此类似的问题,但没有找到与我要尝试的答案相符的答案。

我有一个多维数组:

var arr = [
["apple","ghana",15],
["apple","brazil",16],
["orange","nigeria",10],
["banana","ghana",6]
]

我只通过查看包含水果名称的第一列并返回唯一值数组来过滤数组。因此它将如下所示:

var uniqueArr = [
["apple","ghana",15],
["orange","nigeria",10],
["banana","ghana",6]
]

我想提供执行此操作的功能。我已经尝试过:

    function isUnique (rows,index,self) {
      return self.indexOf(rows) === index
    }

但是它没有用。任何帮助,将不胜感激!

javascript arrays google-apps-script multidimensional-array
4个回答
0
投票

使用第1列(索引0)作为键将数组简化为对象,然后使用Object.values()转换回数组:

const arr = [["apple","ghana",15],["apple","brazil",16],["orange","nigeria",10],["banana","ghana",6]]

const result = Object.values(
  arr.reduce((r, a) => {
    if(!r[a[0]]) r[a[0]] = a // add the item to the object, if the property doesn't exist yet
  
    return r
  }, {})
)

console.log(result)

0
投票

您可以使用Set并通过检查值是否存在来过滤数组。

  • 如果存在则拒绝该元素。

  • 如果不是,则将值添加到集合中并采用元素。

Set
var array = [["apple", "ghana", 15], ["apple", "brazil", 16], ["orange", "nigeria", 10], ["banana", "ghana", 6]],
    seen = new Set,
    result = array.filter(([value]) => !seen.has(value) && seen.add(value));

console.log(result);

0
投票

尝试此

.as-console-wrapper { max-height: 100% !important; top: 0; }

0
投票

使用const filtered = arr.filter((row, index) => arr.findIndex(row2 => row2[0] === row[0]) >= index); 获得结果。

reduce
© www.soinside.com 2019 - 2024. All rights reserved.