Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在两个2d数组| JavaScript中查找匹配的列/行元素_Javascript_Arrays - Fatal编程技术网

如何在两个2d数组| JavaScript中查找匹配的列/行元素

如何在两个2d数组| JavaScript中查找匹配的列/行元素,javascript,arrays,Javascript,Arrays,我想在两个二维数组之间找到匹配的列元素 表示我只想在那些给定数组中找到匹配的字符串值 我的阵列是: //chars : "stack" var x = [["s",0],["t",2],["a",3],["c",1],["k",2]]; // chars: "exchange" var x = [["e",0],["x",2],["c",3],["h",1],["a",2],["n",3],["g",2],["e",3]]; 此处字符“a”在列中匹配,要将其索引/值存储在变量中 帮助,我如何

我想在两个二维数组之间找到匹配的列元素

表示我只想在那些给定数组中找到匹配的字符串值 我的阵列是:

//chars : "stack"
var x = [["s",0],["t",2],["a",3],["c",1],["k",2]];

// chars: "exchange"
var x = [["e",0],["x",2],["c",3],["h",1],["a",2],["n",3],["g",2],["e",3]];
此处字符“a”在列中匹配,要将其索引/值存储在变量中

帮助,我如何用JavaScript(而不是jQuery)实现它

function getIndices(a, b) {
  function toObject(columns) {
    var o = {};
    columns.forEach(function(column, i) {
      var indices = o[column[0]] || [];
      indices.push(i);
      o[column[0]] = indices;
    });
    return o;
  }
  var oa = toObject(a),
      ob = toObject(b),
      result = [];
  Object.keys(oa).forEach(function(key) {
    if(ob[key]) result.push([key, oa[key], ob[key]]);
  });
  return result;
}

console.log(getIndices([["a", 1], ["b", 2], ["a", 5], ["c", 8]], [["c", 1], ["a", 2], ["d", 7], ["d", 9]]));

通过简单的暴力循环,您应该能够找到两个块之间的匹配,如下所示:

var x = [["s",0],["t",2],["a",3],["c",1],["k",2]];
var y = [["e",0],["x",2],["c",3],["h",1],["a",2],["n",3],["g",2],["e",3]];


function intersection(ax,bx){
    var matches = [];
    ax.forEach(function (a,i){
        bx.forEach(function (b,j){
            if (a[0]===b[0]){ // NOTE: make sure you use STRICT EQUAL
                matches.push([a[0],[i,j],[a[1],b[1]]]);
            }
        });
    });
}
[['a',[2,4],[3,2]]]
当调用
交叉点(x,y)
时,它应该为您提供一个交叉点数组,如下所示:

var x = [["s",0],["t",2],["a",3],["c",1],["k",2]];
var y = [["e",0],["x",2],["c",3],["h",1],["a",2],["n",3],["g",2],["e",3]];


function intersection(ax,bx){
    var matches = [];
    ax.forEach(function (a,i){
        bx.forEach(function (b,j){
            if (a[0]===b[0]){ // NOTE: make sure you use STRICT EQUAL
                matches.push([a[0],[i,j],[a[1],b[1]]]);
            }
        });
    });
}
[['a',[2,4],[3,2]]]
第二个元素是匹配元素的索引[2,4] 其中第三个元素是值[3,2]

如果找到多个匹配项,您将获得以下所有匹配项:

[['a',[2,4],[3,2]], [['b',[3,5],[3,2]]]] // Just example
//字符:“堆栈”
变量x=[“s”,0],“t”,2],“a”,3],“c”,1],“k”,2];
(功能(){
//chars:“交换”
变量x=[“e”,0],“x”,2],“c”,3],“h”,1],“a”,2],“n”,3],“g”,2],“e”,3],“a”,7];
var result={};
对于(变量i=0;i})();;那么你想在这里找到这两个索引?你想要得到的确切结果是什么?是的,我想要索引,我只想知道现在哪个字符串值与这些数组中的数值匹配,就像这里的“a”匹配,但是如果同一个字母出现多次会发生什么?我想两个嵌套的for循环可以做到这一点。
c
也存在于两个数组中。这不算吗?这对于methanx来说太复杂了,但是如果多个项匹配呢?这匹配多个项并将所有匹配项存储在返回的数组中。您可以根据需要修改代码段以形成输出。如果您有任何疑问,请告诉我“ax.forEach(function(a,i)”在做什么。请查看array.forEach(function(a,index){})遍历数组并调用作为参数提供的函数。对于每个项,
a
是一个索引为
i
的元素。为什么在函数中使用数组?您给了它们相同的名称…只是更改作用域,以便能够拥有它和两个不同的对象。。。