bugfix> javascript > 投稿

adjacent を削除しようとしているim duplicates しかし、望ましい結果の代わりに(3結果) しか得られない2件

私の期待される出力:

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

ここに私が試したものがあります:

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);

上記の結果から、もう1つの要素が欠落していることがわかります。

回答 3 件
  • 使いやすい 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);
    
    

  • 隣接するキーを探している場合は、すべてのキーを比較するのではなく、最新のキーを追跡する必要があります。

    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);
    
    

  • 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);
    	
    
    

    JSON.stringify を使用できます  スケーラビリティのために、単一のキーを使用する代わりにオブジェクト全体を比較する

あなたの答え