我无法从阵列中删除相邻的vaules

时间:2018-05-25 06:56:57

标签: javascript jquery node.js

我试图删除adjacent duplicates但不是所需的结果(3结果)我只获得 2个结果 < / p>

我的预期输出:

 [{"mw://HOME_BIN":{"position":0}},{"mw://diagnosis_HOME":{"position":3}},{"mw://HOME_BIN":{"position":3}}]

以下是我的尝试:

&#13;
&#13;
var arr = [{"mw://HOME_BIN":{"position":0}},{"mw://diagnosis_HOME":{"position":3}},{"mw://HOME_BIN":{"position":3}},{"mw://HOME_BIN":{"position":3}}];
var nArr = [];
for(var i = 0; i < arr.length;++i){
   var key1 = Object.keys(arr[i]).join('');
   var nLength = ((i + 1) > arr.length - 1 ) ? 0 : i + 1;
   var key2 = Object.keys(arr[nLength]).join('');
   if(key1 == key2) continue;
      nArr.push(arr[i]);
}

console.log(nArr);
&#13;
&#13;
&#13;

从上面的结果中你可以看到另外一个元素缺失

3 个答案:

答案 0 :(得分:0)

更易于使用filter

var arr = [{"mw://HOME_BIN":{"position":0}},{"mw://diagnosis_HOME":{"position":3}},{"mw://HOME_BIN":{"position":3}},{"mw://HOME_BIN":{"position":3}}];

let lastKey;
const filtered = arr.filter((item) => {
  const key = Object.keys(item)[0];
  if (key === lastKey) return false;
  lastKey = key;
  return true;
});
console.log(filtered);

答案 1 :(得分:0)

如果你正在寻找相邻的密钥,你应该只跟踪最新的密钥,而不是比较所有密钥。

&#13;
&#13;
var arr = [{"mw://HOME_BIN":{"position":0}},{"mw://diagnosis_HOME":{"position":3}},{"mw://HOME_BIN":{"position":3}},{"mw://HOME_BIN":{"position":3}}];

let result = [], prev_key = '', key;
for(let item of arr) {
  key = Object.keys(item).sort().join();
  if(key == prev_key) continue;
  prev_key = key;
  result.push(item);
}

console.log(result);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

&#13;
&#13;
var arr = 
    [
      {"mw://HOME_BIN":{"position":0}},
      {"mw://diagnosis_HOME":{"position":3}},
      {"mw://HOME_BIN":{"position":3}},
      {"mw://HOME_BIN":{"position":3}}
    ];

var nArr = [];

arr.forEach((ar,index) => {
  if(index === arr.length - 1) {
    nArr.push(ar);
    return;
  }
  
  if(JSON.stringify(ar) !== JSON.stringify(arr[index+1])){
    nArr.push(ar);
  }
})

console.log(nArr);
	
&#13;
&#13;
&#13;

您可以使用JSON.stringify来比较整个对象,而不是使用单个密钥,以实现可伸缩性