我当前正在从事一个小型家庭项目,我正在尝试将数组推入数组数组,如果说阵列在数组数组中还不存在。
var arrayArr = [[1,4]];
function pushArr() {
var tempArr = [1, 3];
var tempArr2 = [1, 4];
for(i = 0; i < arrayArr.length, i++)
if(!arrayArr.indexOf(tempArr[i])) {
arrayArr.push(tempArr[i]);
} else {
//other logic
}
}
现在,我知道这个示例在现实世界中并没有真正的意义,而是为了说明我的关注。如何搜索一系列数组以确保我不会创建重复。
如果您有任何疑问,请询问。
谢谢!
在我的解决方案中,在isArrayInArray()
中,我正在遍历主数组arrayArr
中的每个元素。然后,我要比较每个给定数组匹配的第一个和第二个元素。如果是这样,已经添加了数组,以便它返回true。
var arrayArr = [[1, 4]];
pushArray([1, 4]); // does not get added
pushArray([1, 3]); // gets added
console.log(arrayArr);
function isArrayInArray(arrayToSearch, arrayToFind) {
for (let i = 0; i < arrayToSearch.length; i++) {
if (arrayToSearch[i][0] === arrayToFind[0] && arrayToSearch[i][1] === arrayToFind[1]) {
return true;
}
}
return false;
}
function pushArray(array) {
if (!isArrayInArray(arrayArr, array)) {
arrayArr.push(array);
}
}
你知道[1,2] === [1,2]是false。
请参阅如何使用JavaScript比较两个阵列?
即使您有以下内容:
let a = [1,2];
let b = [1,2];
a
和b
都将两个不同的引用对具有相同数字的数组进行。他们不等!
let a = [1,2];
let b = [1,2];
console.log(a === b);
如果我们通过此和,我们假设对于我们的问题,两个具有相同长度和相同数据的数组是相同的,我们可以尝试调用函数arrayCanBePushed
,然后将数组附加到我们的数组数组,如果它返回true,那么我们可以继续进行。
var arrayOfArrays = [[1,2],[2,3],[3,4,5],[7]];
function arrayCanBePushed(arr){
return !arrayOfArrays.filter(a => a.length === arr.length)
.some(a => a.every(ele=>arr.includes(ele)));
}
console.log(arrayCanBePushed([1,2]));
console.log(arrayCanBePushed([1,2,3]));
试图使答案尽可能简单。基本上,我们正在通过arrayArr
迭代,并检查输入数组的所有元素是否匹配元素数组的任何的所有元素。因此,它应该只是嵌套在some
中的every
。但是,如您现在在答案中澄清的那样,如果我们仅比较两元素阵列(到字符串转换的数组应该很快(,那么我将使用pushArr1
中所示的字符串比较。这是您第一次尝试时要去的一般方向,所以我将其添加到答案中。
var arrayArr = [[1, 3, 5]];
var tempArr = [1, 3, 5];
var tempArr2 = [1, 4];
pushArr1(tempArr);
function pushArr(temp)
{
if(!arrayArr.some(function(e){
return e.every(function(e1, i)
{
return e1 === temp[i];
})
})) arrayArr.push(temp);
console.log(arrayArr);
}
function pushArr1(temp)
{
if(!arrayArr.some(function(e){return e.join(",") === temp.join(",")})) arrayArr.push(temp);
console.log(arrayArr);
}