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

时间:2017-04-26 19:02:16

标签: javascript arrays algorithm loops

我目前正在开发一个小型家庭项目,我正在尝试将数组推入数组数组,如果数组数组中尚不存在所述数组。

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
        }

  } 

现在,我知道这个例子在现实世界中并没有真正意义,它只是为了说明我的担忧。如何搜索阵列数组以确保我不会创建重复项。

如果您有任何疑问,请询问。

谢谢!

4 个答案:

答案 0 :(得分:2)

在我的解决方案中,在isArrayInArray()中,我循环遍历主数组arrayArr中的每个元素。然后,我将比较每个给定数组的第一个和第二个元素是否匹配。如果是这样,则已经添加了数组,因此它将返回true。

&#13;
&#13;
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);
    }
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你知道[1,2] === [1,2]是假的。

请参阅How to Compare two Arrays are Equal using Javascript?

答案 2 :(得分:0)

即使你有以下内容:

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

答案 3 :(得分:0)

试图让答案尽可能简单。基本上我们迭代arrayArr并检查输入数组的所有元素是否匹配任何元素数组的所有元素。所以它应该只是嵌套在every中的some。但是,如果我们只是比较两个元素的数组(数组到字符串的转换应该非常快),你现在已经在答案中澄清了,那么我将使用pushArr1中所示的字符串比较。这是您第一次尝试时的总体方向,所以我将其添加到我的答案中。

&#13;
&#13;
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);
}
&#13;
&#13;
&#13;