如何从数组中查找数据?

时间:2018-11-29 04:11:34

标签: javascript jquery angular

首先,我很抱歉询问我不理解的代码。这是当前用于从数组中查找的代码。这段代码中有一个函数findProducts(p)。我对该函数被称为this.findProducts, [p.id]的方式感到困惑。

任何人都可以帮助我,我是JavaScript的完整初学者。

谢谢。

  products = [];
  ngOnInit() {
    this.products = this.getProducts();
  }
  getProducts() {
    return [
      { 'id': '1', 'title': 'Screw Driver', 'price': 400, 'stock': 11 },
      { 'id': '2', 'title': 'Nut Volt', 'price': 200, 'stock': 5 },
      { 'id': '3', 'title': 'Resistor', 'price': 78, 'stock': 45 },
      { 'id': '4', 'title': 'Tractor', 'price': 20000, 'stock': 1 },
      { 'id': '5', 'title': 'Roller', 'price': 62, 'stock': 15 },
    ];
  }

  updateStock(p) {
    console.log(p); //{id: "1", updatedStockValue: 23}
    console.log("final", this.products.find(this.findProducts, [p.id]));
  }

  findProducts(p) {
    console.log(p); //{id: "1", title: "Screw Driver", price: 400, stock: 11…}
    console.log(this); //["1"]

    return p.id === this[0];
  }

4 个答案:

答案 0 :(得分:1)

JavaScript具有Array.find(function(element(){})函数,可用于在数组中查找值,并在function(element){}内定义匹配条件。

这里,将Array.find()函数的参数作为function(element)(在这种情况下为findProducts())传递,并将find函数的其他参数作为逗号后面的另一个参数(在这种情况下为p.id)。

您可以在调用函数时传递任意数量的参数,并且都可以使用数组索引方法访问它们。例如,您可以

somefunction(someOtherFunction, a, b, c)...
...

以后您可以访问以下值:

a将是this[0]

b将是this[1]

c将是this[2]

答案 1 :(得分:1)

nic: {

    required: function(element){
        if(('#type').val()==3){
            return false;
        }
        else if(('#type').val()==7){
            return false;
        }
        else{
            return true;
        }

},

以上功能是

的扩展
this.products.find(this.findProducts, [p.id])
findProducts(p) {
  return p.id === this[0];
}

它将遍历所有数组元素并返回具有给定p.id的匹配乘积

答案 2 :(得分:1)

Mozilla documentation可以深入了解find的第二个参数是thisArg

  

在执行回调时用作此对象的对象。

因此,在您的示例中,回调为findProducts,而thisArg是一个包含一个元素的数组(说实话,这是一种有点怪异的方法)。

如果没有thisArg,则this中的findProducts不会是该数组。

下面是一个有效的演示。请注意,如果没有thisArg,则this中的findProductswindow对象。对于thisArg,它是第二个数组参数:

var arr = [
  {id: 1, name: 'a'},
  {id: 2, name: 'b'},
  {id: 3, name: 'c'}, 
  {id: 4, name: 'd'}
];

function findProducts(p) {
  console.log('in findProducts', p);
  console.log(this);
  return p.id === this[0];
}

var f = arr.find(p => findProducts(p));
console.log('without thisArg', f);

f = arr.find(findProducts, [1]);
console.log('with thisArg', f);

答案 3 :(得分:0)

您可以在您的 findProducts fn

中进行操作
viewDidLayoutSubviews

read more about find and findIndex