2

我有这个代码:

var test = [[1,1], "b","a"];
    function findArray(element) {
        return element == [1,1];
    }
    console.log(test.find(findArray));

它返回:

undefined

我应该怎么做才能在测试数组中找到 [1,1] 数组?(虽然我不想循环它)

4

2 回答 2

5

您不能将两个对象与===or进行比较,==因为它们是引用,并且true仅当它们指向相同的地址时才会评估。

您需要将第一个数组中的每个元素与第二个数组中的相应索引匹配以检查相似性,您可以使用every.

var test = [ [1, 1], "b", "a"];

function findArray(element) {
  if(Array.isArray(element)){
    let arrayToMatchWith = [1,1]
    if(element.length === arrayToMatchWith.length){
      return element.every((v,i)=> v === arrayToMatchWith[i])
    }
  }
  return false
}
console.log(test.find(findArray));
console.log([[1,2]].find(findArray));
console.log([[1,1,1]].find(findArray));
console.log([[1]].find(findArray));


我可以将搜索到的数组作为参数传递吗?

是的你可以。在这里,我使用了一个咖喱函数:

var test = [[1, 1], "b", "a"];

let curried = (arr) => (element) => {
  if (Array.isArray(element)) {
    if (element.length === arr.length) {
      return element.every((v, i) => v === arr[i])
    }
  }
  return false
}

let curried1 = curried([1,1])
console.log(test.find(curried1));
let curried2 = curried([1,2,2])
console.log([[1, 2]].find(curried2));
let curried3 = curried([1,1,1])
console.log([[1, 1, 1]].find(curried3));
let curried4 = curried([1])
console.log([[1]].find(curried4));

于 2019-10-02T18:03:01.427 回答
0

比较中的数组文字与原始数组中的数组是不同的对象。如果您从每个数组派生出一个可比较的实体,您可以在方法内检查它find。一种方法是调用该toString方法。

仅当您真的不想遍历数组进行比较时才需要这样做。

var test = [[1,1], "b","a"];

 function findArray(element) {
    
   if (element.constructor === Array)
      return element.toString() == [1,1].toString();
 }
    
 console.log(test.find(findArray));

于 2019-10-02T18:14:49.787 回答