使用地图功能仅获取元素的属性值

时间:2018-11-05 09:10:35

标签: javascript

我试图仅使用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,因此它应该只返回该值,但不会返回。所以,我被困在这里。有人可以帮我吗?

2 个答案:

答案 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);