获取数组中对象的属性

Posted

技术标签:

【中文标题】获取数组中对象的属性【英文标题】:Getting a property of an object within an array 【发布时间】:2018-11-28 05:48:00 【问题描述】:

我使用 Vue.js 并且有一个方法可以将一个数组中的值与另一个数组中的值进行比较。

array1:  [ name: 'test1', somevar: true ,  name: 'test2', somevar: false ]
array2: ['test1', 'test3']

  compare() 
    //I want to access an object property within an array1
    this.array1.forEach((element) => 
      if(this.array1.element.name.includes(this.array2[0])) 
        // if it is true, I would like to remove that compared value from an array 1
        if(this.array2[0] !== -1) 
          var index = this.array1.element.name.indexOf(this.array2[0])
          this.array1.splice(index, 1)
        
      

我认为这部分:this.array1.forEach((element) 不正确。如何访问该对象的属性?

【问题讨论】:

if (element.name...) 不需要this.array1 【参考方案1】:

array1 是一个数组,而不是一个对象,因此访问this.array1.element 将不起作用。只需将元素引用为forEach 的参数即可。

另外,forEach 传递的函数接受另一个参数:第二个参数代表当前元素的索引,因此无需搜索indexOf

但是,甚至比那些调整更好,在这种情况下使用filter 会更合适:

const obj = 
  array1:  [ name: 'test1', somevar: true ,  name: 'test2', somevar: false ],
  array2: ['test1', 'test3'],
  compare() 
    obj.array1 = obj.array1.filter(( name ) => (
      !obj.array2.includes(name)
    ))
  

obj.compare();
console.log(obj.array1);

【讨论】:

我认为将!element.name.includes(obj.array2[0]) 更改为!obj.array2.includes(element.name) 会更有意义,因为他希望从array1 中删除名称出现在array2 中的项目。 谢谢!以及如何将元素引用为 forEach 函数中的参数? 例如this.array1.forEach((element, i) => 那么当前被迭代的元素的索引是i。 (不要尝试在迭代数组时对其进行变异) 我仍然无法访问数组内的对象属性name 我试过if(this.array1.element.name.includes(this.array2[0])) 而不是if(element[i].name.includes(this.array2[0])) ,但还是不行。

以上是关于获取数组中对象的属性的主要内容,如果未能解决你的问题,请参考以下文章

怎么获取数组里对象的某一项属性值

从对象数组中获取属性值数组

获取数组中对象的属性

TS / JS-如果对象的属性与数组中的另一个属性相匹配,则从对象数组中获取“值”

swift 从对象数组中获取属性值数组

通过属性值从对象数组中获取JavaScript对象[重复]