2013-03-02 118 views
0

我想删除更多维数组中的重复元素之一。这是我到目前为止的代码:检查多维数组中的重复元素并只删除一个元素

for (var i = 0; i< blog.length; i++){ 
    for (var i = 0; i< blog.length; i++){ 
    var check1 = blog[i][1]; 
    var check2 = blog[j][1]; 
    //check1 = 120;;200 check2 = 130;;180 
    if (check1 == check2){ 
     blog[i].splice(i, 1); 
    } 
    } 
} 
  • 我想只删除复制对的第一个元素。
  • 你能给我一个更聪明的代码吗?
+1

“moredimensional”是什么意思? – Pointy 2013-03-02 14:30:40

+0

我们可以看到一个变量'blog'的简单例子吗? – 2013-03-02 14:31:21

+1

此外,请注意,您正在内循环中使用变量'i'。 – Kaeros 2013-03-02 14:34:05

回答

0

循环向下的阵列和存储在找到值的键在对象所以你可以做一个快速in检查。

var blog = [['a', 0], ['b', 1], ['c', 2], ['d', 3], ['e', 0]]; // test var 

var i = blog.length, // var to loop over 
    o = {}, // obj to hold keys 
    b2 = []; // temporary array 
while (i--) { // looping down 
    if (false === blog[i][1] in o) { // if not already seen 
     o[blog[i][1]] = 1; // mark as seen 
     b2[b2.length] = blog[i]; // add to temporary array 
    } 
} 
blog = b2.reverse(); // temporary array is backwards so reverse it and set `blog` 
// [["b", 1], ["c", 2], ["d", 3], ["e", 0]] 
+1

这也可能是使用**惊人** [去操作员](http://blogs.msdn.com/b/ericlippert/archive/2010/04/01/somelastminutefeatures.aspx)的机会, 'while(i - > 0){/ * .. * /}',[但我现在不会在我的答案中提及](http://stackoverflow.com/q/1642028/1615483)。 – 2013-03-02 14:48:19

+0

这对我来说很好: var i =(blog.length-1),o = {},f2 = []; while(i> = 0){ 如果(false === blog [i] [1] in o){ f2.push(blog [i]); } i--; } blog = f2; 谢谢! – venumaer 2013-03-02 16:13:00