找出数组中是否已存在对象

时间:2019-01-31 08:57:39

标签: javascript node.js vue.js

仅当我的条形码是新结构时,我才想执行数据库操作。

我的计划是使用函数include()或简单地计算数组中的存在。

我发现了非常有用的代码段,例如countDuplicate和函数include()可以完成这项工作,但我想我的案例要更具体一些。

但是我不仅有一个包含字符串的对象/数组。 (第一个例子)

我有一个包含不同对象及其属性的对象。

//1st example (this works pretty well)

function countDuplicate(array, elem) { //just the special type of syntax for Vue/Node.js
    return array.filter(item => item == elem).length;
}

var cars = ["Saab", "Volvo", "BMW", "BMW", "BMW"];
console.log(countDuplicate(cars, "BMW"); //will return 3
console.log(cars.includes("BMW")); //will return true 

但是正如我所说的,我有更多这样的结构:

var object = {
  sub_object1: { title: "test1", barcode: "0928546725" },
  sub_object2: { title: "test2", barcode: "7340845435" },
};

如何在那里获得相同的结果?

我的计划是这样做:

if(countDuplicate(object, "0928546725") == 0)
    //... do my operations

但是这不起作用,因为我不太了解如何进入对象的结构。我尝试了不同的循环,但实际上没有任何作用。

这是我的数组:

export default {
    data() {
      return {
        form: {
              items: [ //Barcodes
              ],
              status: 1,
              rent_time: Date.now()
              },
           submit: false,
           empty: false,
  }
 },

____________________________________________________________________ 解决方案:

我尝试了@adiga的以下方法,它适用于示例,但不适用于我的实际情况。

这是我的控制台的屏幕:  This is a screen of my console:

所以

  

一个简单的object.filter(a => a.barcode == elem)应该可以工作-@adiga

喜欢吗?

countDuplicateBarcodes: function(obj, elem) {
    //return Object.values(obj).filter(a => a.barcode == elem).length;
    return obj.filter(a => a.barcode == elem).length;
}

不再工作...

3 个答案:

答案 0 :(得分:2)

使用Object.values获取数组中对象的所有值,然后使用Error using trainingOptions (line 265) The value of 'ValidationData' is invalid. An error occurred while trying to determine whether "readData" is a function name. Error in training_Nov_2018_96p4_modern (line 42) options = trainingOptions('adam',... 'ValidationFrequency',3, ... 'ValidationData', augimdsValidation,... 'MaxEpochs', 400, ... 'InitialLearnRate', 0.0001); Caused by: Can't reload 'C:\ProgramFiles\MATLAB\R2018b\bin\win64\sl_graphical_classes.dll'

filter

答案 1 :(得分:0)

如果您只想在对象中查找条形码,那么您的问题是例如的重复项

https://stackoverflow.com/a/46330189/295783

已更改以满足您的要求:

const barcodes = {
  sub_object1: { title: "test1", barcode: "0928546725" },
  sub_object2: { title: "test2", barcode: "7340845435" },
};

const findMatch = (barcode, barcodes) => JSON.stringify(barcodes).includes(`"barcode":"${barcode}"`);

console.log(
  findMatch("0928546725",barcodes)
)

答案 2 :(得分:0)

看一下代码,看起来好像您实际上是在使用对象数组而不是嵌套对象。如果是这样,应该可以执行以下操作:

let scannedTools = [
  {barcode: "ABC", createdAt: "today"},
  {barcode: "XYZ", createdAt: "123"}
];

function isAlreadyScanned(tool) {
  return scannedTools.filter(t => t.barcode == tool.barcode ).length > 0
}

console.log(isAlreadyScanned({barcode: "ABC"}));
console.log(isAlreadyScanned({barcode: "ETRASDASD"}));
console.log(isAlreadyScanned({barcode: "XYZ"}));