【问题标题】:Find out if an object already exists in an array找出一个对象是否已经存在于数组中
【发布时间】:2019-06-24 16:30:12
【问题描述】:

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

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

我发现了非常有用的代码 sn-ps,例如 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 尝试了以下方法,它适用于示例,但不适用于我的真实案例。

这是我的控制台屏幕:

所以

一个简单的 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;
}

现在不行了……

【问题讨论】:

  • 我不确定您的问题措辞是否会为您提供最佳答案。在我看来,您似乎只是想检查您拥有的值是否已经在一组对象中。只有在您错误地添加了已经存在的条形码之后,计算重复才有用,不是吗?
  • 如果您只想查找该值是否已经存在,那么这里是在嵌套对象中的任何位置查找值的副本:stackoverflow.com/questions/46329392/…
  • @mplungjan 您可以将其标记为重复。检查OP的答案
  • 请展示您的阵列的实际示例。
  • 我不同意。在问这里之前,我已经查了几个小时的东西。但这对我没有帮助。我提到了其他帖子。我真的不明白为什么你们总是想关闭每个在某种程度上与其他问题相似的帖子。

标签: javascript node.js vue.js


【解决方案1】:

使用Object.values获取数组中object的所有值,然后使用filter

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

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

console.log(countDuplicateBarcodes(object, "0928546725"))

【讨论】:

  • 我认为OP想在添加之前查看条形码是否已经存在
  • @mplungjan 如问题中所述,他们将像这样使用它:if(countDuplicateBarcodes(object, "0928546725") == 0)。名字应该是checkIfBarcodeExists
【解决方案2】:

如果你只是想在你的对象中找到一个条形码,那么你的问题就是 example 的副本

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

【讨论】:

    【解决方案3】:

    查看您的代码,看起来您实际上使用的是对象数组而不是嵌套对象。如果是这样的话,这样的事情应该可以工作:

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

    【讨论】:

      猜你喜欢
      • 2023-02-24
      • 2014-07-03
      • 2017-02-24
      • 2011-07-27
      • 1970-01-01
      • 2019-08-22
      • 2019-11-26
      • 1970-01-01
      • 2011-09-11
      相关资源
      最近更新 更多