用于返回2D数组中的不同值的函数

tan*_*nya 3 javascript

我有以下2D数组

var items = [['al','bv','sd'],
             ['al','cc','ab'],
             ['cv','vv','sw'],
             ['al','bv','sd']
            ];
Run Code Online (Sandbox Code Playgroud)

我需要一个函数,它将返回一个类似的数组,但具有不同的值.例如,在上面的数组中,['al','bv','sd']发生两次.

我想函数返回我:

var items = [['al','bv','sd'],
             ['al','cc','ab'],
             ['cv','vv','sw']
            ];
Run Code Online (Sandbox Code Playgroud)

dav*_*ave 6

假设数据很小,快速而肮脏的解决方案.

在每次迭代中,将行转换为字符串.如果字符串尚未存在于地图中,请使用字典存储值为True的字符串.另外,将它添加到输出数组.如果它已经在字典中,请转到下一个项目.

例:

var d = {};
var out = [];
for( var i = 0; i < items.length; i++ ) {
    var item = items[i];
    var rep = item.toString();

    if (!d[rep]) {
        d[rep] = true;
        out.push(item);
    }
}

// out has the result
Run Code Online (Sandbox Code Playgroud)


Rob*_*b W 4

您必须循环两次(或三次):

  1. 从头到尾循环所有“行”
  2. 再次循环,从头到尾遍历所有“行”

    • 如果列表相等,则忽略它
    • 否则,
  3. 循环遍历所有“列”:

    • 如果值不相等,则跳转到父循环。
    • 循环结束后,使用 方法删除元素.splice

演示: http: //jsfiddle.net/EuEHc/

代码:

for (var i=0; i<items.length; i++) {
    var listI = items[i];
    loopJ: for (var j=0; j<items.length; j++) {
        var listJ = items[j];
        if (listI === listJ) continue; //Ignore itself
        for (var k=listJ.length; k>=0; k--) {
            if (listJ[k] !== listI[k]) continue loopJ;
        }
        // At this point, their values are equal.
        items.splice(j, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)