gpt4 book ai didi

javascript - 在应用程序脚本中过滤二维数组

转载 作者:行者123 更新时间:2023-11-28 17:28:27 25 4
gpt4 key购买 nike

在应用程序脚本中,我有以下内容:

function diff(A, B) {
return A.filter(function (a) {
return B.indexOf(a) == -1;
});
}

当我运行时:

function testArray(){

ta = ['a','b','c','d']
ts = ['a','b','c']

o =diff(ta,ts)

Logger.log(o);


}

我得到:['d'] - 正确答案,现在我尝试将过滤器应用于二维值数组 - 谷歌工作表。

我尝试过:

  var ss = SpreadsheetApp.getActiveSpreadsheet();
var target_sheet_range = ss.getSheets()[1].getDataRange();
var target_sheet_values = target_sheet_range.getValues();
Logger.log('target_sheet_values');
Logger.log(target_sheet_values);
var range = ss.getSheets()[0].getDataRange();
var values = range.getValues();


Logger.log('values');
Logger.log(values);


var diff_values = diff(values, target_sheet_values)

但这没有考虑数组的二维性质。您可以在谷歌电子表格 https://docs.google.com/spreadsheets/d/1fFr9Sz2EAiMYoybg-evV33n_BZjF-1QNnnKqiqSXQ_g/edit?usp=sharing 中看到它

输出:

[18-06-23 14:45:22:129 EDT] target_sheet_values
[18-06-23 14:45:22:130 EDT] [[a, a, a, a, a], [z, x, c, v, b], [m, n, b, v, c]]
[18-06-23 14:45:22:457 EDT] values
[18-06-23 14:45:22:458 EDT] [[a, a, a, a, a], [z, x, c, v, b], [m, n, b, v, c], [a, s, d, f, g], [q, w, e, r, t]]
[18-06-23 14:45:22:459 EDT] hhhhhh
[18-06-23 14:45:22:459 EDT] [[a, a, a, a, a], [z, x, c, v, b], [m, n, b, v, c], [a, s, d, f, g], [q, w, e, r, t]]

如何修改过滤器函数2过滤二维数组

最佳答案

您的问题与 javascript [1, 2, 3] != [1, 2, 3] 中的事实有关。数组和对象的比较不是通过值来完成的。这也适用于 indexOf()。例如:

var a = [[1, 2, 3], [4, 5, 6]]
var b = [4, 5, 6]

console.log(a.indexOf(b)) // returns -1

要解决此问题,您需要编写一个函数来按照您想要的方式定义相等性。例如:

// arrays with the same values in the same order will be considered equal
function array_equals(a, b){
return a.length === b.length && a.every((item,idx) => item === b[idx])
}

console.log(array_equals([1, 2, 3], [1, 2, 3]))
console.log(array_equals([1, 2, 3], [1, 2, 4]))

有了它,您现在可以使用以下内容进行过滤:

var a = [[1,2,3], [4, 5, 6], [7, 8, 9]]
var b = [[1, 2, 3], [4, 5, 6]]


function array_equals(a, b){
return a.length === b.length && a.every((item,idx) => item === b[idx])
}

function diff(A, B) {
return A.filter(test => {
return B.findIndex(item => array_equals(item,test)) == -1;
});
}
console.log(diff(a,b))

关于javascript - 在应用程序脚本中过滤二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51004121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com