我试图仅使用map函数来获取属性值。我知道如果我使用map,那么它将返回一个元素数组。所以,这就是我想要做的。
我有这个对象数组
mainarray = [{ foo : '1' , id:'2' }, { foo : '2' , id:'3' },{ foo : '1' , id:'4' }];
现在,我正在做的是(数据是一些不同的数组)。
let count;
if (data) {
if ((data[0].foo) && (data[0].foo)) {
count = this.state.mainarray.map((object, index) => {
if ((object.Id === data[0].id) && (data[0].foo === object.foo)) {
return object;
}
});
}
}
我已经这样做了。现在在这里,如果它不匹配任何东西,那么它将返回一个具有所有undefined
值的数组,因为其中包含许多元素。
[undefined,undefined]
但是我实际上尝试过使用object.foo
,因此它应该只返回该值,但不会返回。所以,我被困在这里。有人可以帮我吗?
答案 0 :(得分:1)
我认为您想使用filter
方法
let count;
if (data) {
if ((data[0].foo) && (data[0].foo)) {
count = this.state.mainarray.filter((object) => (object.Id === data[0].id) && (data[0].foo === object.foo)).length;
}
}
答案 1 :(得分:0)
您可能想改用find
,如果找到匹配项,则可以使用该对象的foo
值。
示例
const mainarray = [
{ foo: "1", id: "2" },
{ foo: "2", id: "3" },
{ foo: "1", id: "4" }
];
const idToFind = "3";
const obj = mainarray.find(element => element.id === idToFind);
const count = (obj && obj.foo) || "0";
console.log(count);