如果数组中不存在数组,则推送数组



我当前正在从事一个小型家庭项目,我正在尝试将数组推入数组数组,如果说阵列在数组数组中还不存在。

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];

ab都将两个不同的引用对具有相同数字的数组进行。他们不等!

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);
}

最新更新