我需要从以下地址获取以下2d数组:
[[选项10,2.0],[选项10,2.0],[选项9,1.0],[选项7,1.0]]
到
[[选项10,2.0],[选项9,1.0],[选项7,1.0]]
我发现这篇文章(Splitting a 2D array using some() , by date, avoiding duplicates. Just want 1 unique email, not row. Where am i wrong here?)有一种非常有效的获取唯一值的方法,但我无法弄清楚如何将它应用到我的情况中。
答案 0 :(得分:1)
您的用例比您所指的用例更简单。
试试这个例子:
function myFunction() {
var source = [['Option 10', 2], ['Option 10', 2], ['Option 9', 1], ['Option 7', 1]];
var dest = [];
dest.push(source[0]);
for(var n = 1 ; n< source.length ; n++){
if(dest.join().indexOf(source[n].join()) == -1){dest.push(source[n])};
}
Logger.log(dest);
}
答案 1 :(得分:1)
因为&#39; unique&#39;并不总是很容易描述,我经常使用的模式实际上是使用ES5阵列图/滤波函数改变Serge的正确答案。
已修改的版本:
function hash(arr) {
// in this case the hash method is the same as Serge's Array.join() method,
but could be customised to suit whatever condition you need to generate
bespoke comparators such as where `1 + 3` should match `2 + 2`, or where
particular columns in the array can be omitted
return arr.join();
}
function myFunction() {
var source = [['Option 10', 2], ['Option 10', 2], ['Option 9', 1], ['Option 7', 1]];
var hash = source.map(
function (row) {
return hash(row);
}
);
source = source.filter(
function (filterRow, i) {
return hash.slice(0, i).indexOf(hash(filterRow)) < 0;
}
);
Logger.log(source);
}
我只包括这个,因为有时您的比较可能需要稍微弯曲一下。在你的例子中,这并不重要,这就是为什么Serge是正确的,但我同意展示一个潜在的扩展思路,以便在需要进行独特的调整时 &#39;