如何在javascript中搜索两个变量的列表

时间:2016-07-20 18:24:28

标签: javascript

所以在我的列表中我有很多变量,我通过说:

{i = 0, j = 0, walls = [ true, false, true, true], "visited"= true}
{i = 1, j = 0, walls = [ true, false, true, true], "visited"= true}
{i = 2, j = 0, walls = [ true, false, true, true], "visited"= true}
{i = 0, j = 1, walls = [ true, false, true, true], "visited"= true}
{i = 1, j = 1, walls = [ true, false, true, true], "visited"= true}
{i = 2, j = 1, walls = [ true, false, true, true], "visited"= true}

问题是当我有i和j需要的两个数字时,我需要搜索i和j。例如,当i = 2且j = 1时,我需要找到在这种情况下(使用上面的例子)将为5的索引。

我尝试过使用.indexOf()但是没有用。我也尝试过使用.find(),但是也没用。

我不使用jquery。

我无法找到任何解决方案,所以任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

使用具有适当对象的数组,您可以使用Array#findIndex

如果需要ES5,请使用polyfill

var data = [{ i: 0, j: 0, walls: [true, false, true, true], visited: true }, { i: 1, j: 0, walls: [true, false, true, true], visited: true }, { i: 2, j: 0, walls: [true, false, true, true], visited: true }, { i: 0, j: 1, walls: [true, false, true, true], visited: true }, { i: 1, j: 1, walls: [true, false, true, true], visited: true }, { i: 2, j: 1, walls: [true, false, true, true], visited: true }];

function find(i, j) {
    return data.findIndex(function (a) {
        return i === a.i && j === a.j;
    });
}

console.log(find(2, 1));

ES5的最低实施

var data = [{ i: 0, j: 0, walls: [true, false, true, true], visited: true }, { i: 1, j: 0, walls: [true, false, true, true], visited: true }, { i: 2, j: 0, walls: [true, false, true, true], visited: true }, { i: 0, j: 1, walls: [true, false, true, true], visited: true }, { i: 1, j: 1, walls: [true, false, true, true], visited: true }, { i: 2, j: 1, walls: [true, false, true, true], visited: true }];

function find(i, j) {
    var result = -1;
    data.some(function (a, index) {
        if (i === a.i && j === a.j) {
            result = index;
            return true;
        }
    });
    return result;
}

console.log(find(2, 1));

答案 1 :(得分:-1)

假设您的对象有效,并且在列表中将它们存储在数组中。然后,您可以使用for循环并在每次迭代时检查ij属性,如果它们匹配,则返回当前索引i



var arr = [
	{i : 0, j : 0, walls : [ true, false, true, true], "visited": true},
	{i : 1, j : 0, walls : [ true, false, true, true], "visited": true},
	{i : 2, j : 0, walls : [ true, false, true, true], "visited": true},
	{i : 0, j : 1, walls : [ true, false, true, true], "visited": true},
	{i : 1, j : 1, walls : [ true, false, true, true], "visited": true},
	{i : 2, j : 1, walls : [ true, false, true, true], "visited": true}
];

function getIndex(I, J) {
  for( var i=0; i<arr.length; i++ ) 
    if(arr[i].i == I && arr[i].j == J) return i;
}

console.log(getIndex(2,1))
&#13;
&#13;
&#13;