【问题标题】: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

标签: javascript arrays object vue.js


【解决方案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])) {,但还是不行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
相关资源
最近更新 更多