如何检查对象数组中是否已存在所有准备就绪的项目?

时间:2018-07-09 09:18:10

标签: javascript arrays

我想检查对象数组中是否已经存在item.name,因此它不会将现有对象推入数组。

这是一段代码:

loadedVariations.forEach(function(item){
      console.log('item', item.name.indexOf(name));

      if(name === tests[test].id && item.name.indexOf(name) < 0){
          console.log(item.name)

          loadedVariations.push({name: name, variation: variation});
          tests[test].callback(name, variation);    
          console.log('tests', tests[test], variation, loadedVariations);

          if(variation === '1'){
            value = "control"
          } else {
            value = "variationb"
          }

          localStorage.setItem('gtmTest', JSON.stringify(loadedVariations));
        }
    })

这是我本地存储中的输出:

gtmTest: 

[{"name":"globalPassFrame_review","variation":"1"},
{"name":"globalPassFrame_review","variation":"1"},
{"name":"socialshare_bar","variation":"2"},
{"name":"socialshare_bar","variation":"2"}]

这是google标记管理器中的AB测试,具有在多个测试脚本上运行的帮助脚本,因此它可以运行多次,这就是为什么我需要检查对象数组中是否已存在所有项目,因此它不会推送相同的对象两次。

1 个答案:

答案 0 :(得分:0)

这是如何使用every和match name遍历json object的方法。如果要具有唯一名称数组,可以使用forEach进行迭代,并检查它是否不存在于数组中。

var object = [{"name":"globalPassFrame_review","variation":"1"},{"name":"globalPassFrame_review","variation":"1"},{"name":"socialshare_bar","variation":"2"},{"name":"socialshare_bar","variation":"2"}];

var tobeFound='globalPassFrame_review';

object.every(function (elem, i) {
    if(elem.name == tobeFound ){
     console.log('element found at index '+i);
      return false ;
   }
});

// In case you want to store uniue Names
var uniqueNames=[];
object.forEach(function (elem, i) {
     if(!uniqueNames.includes(elem.name)){
        uniqueNames.push(elem.name);
    }
});
console.log(`unique Names are ${uniqueNames}`);

// Using ES6 style of code.
const uniqueNamesArr = [...new Set( object.map(obj => obj.name)) ];
console.log(uniqueNamesArr);