首先,我很抱歉询问我不理解的代码。这是当前用于从数组中查找的代码。这段代码中有一个函数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];
}
答案 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
中的findProducts
是window
对象。对于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)