我有以下 2 个列表:
array_main = [[01-0158969,315],[01-0161045,699],[01-0161046,500]]
array_helper_both = [[01-0158969,315],[01-0161045,699],[01-0161050,500]]
我正在尝试将 array_main 与 array_helper_both 进行比较,如果有任何差异(array_main 中存在元素,但 array_helper_both 中不存在),那么我正在尝试将其添加到 array_helper_both。例如,“01-0161046”在 array_main 中,但不在 array_helper_both 中。
因此 array_helper_both 结果将是:
[[01-0158969,315],[01-0161045,699],[01-0161050,500],[01-0161046,500]]
这是我试过但似乎不起作用的代码:
var list3 = array_helper_both.filter(x => !array_main.includes(x));
var list4 = array_helper_both.concat(array_main.filter(x => !array_helper_both.includes(x)));
任何线索/建议将不胜感激。
答案 0 :(得分:0)
如果它们是平面阵列,这将起作用。但它们是二维数组。你不能比较两个二维数组,就好像它们只是一维数组和一些值 if (some_array.includes(some_value))
。
在这种情况下,您可能可以将内部数组变成扁平字符串:
[01-0158969,315]
--> "01-0158969,315"
比较值,然后将值转回数组:
"01-0158969,315"
--> [01-0158969,315]
答案 1 :(得分:0)
您必须比较两个数组(array_main
和 array_help_both
中的元素)。最简单的选择是使用 JSON.stringify():
var array_helper_both_string = array_helper_both.map(val => JSON.stringify(val));
var list4 = array_helper_both.concat(array_main.filter(x => !array_helper_both_string.includes(JSON.stringify(x))));
有关可能(并且可能更好)的替代方案,请参阅以下主题: