JavaScript地图返回对象数组,而不是ojbect

时间:2019-08-05 06:32:27

标签: javascript arrays object ecmascript-6

Javascript方法返回对象数组而不是对象。

辅助方法:

export const getDefaultValue = (valueList) => {
    return defaultValue = valueList.map((item, index) => {
        if (item.isDefault) {
            return item;
        }
    });
}

输入:

let valueList = [{itemId: 1, isDefault: true}, {itemId: 2, isDefault: false}, {itemId: 3, isDefault: false}]

调用getDefaultValue(valueList)时,我得到的输出如下:

输出:

[{itemId: 1, isDefault: true}, undefined, undefined]

getDefaultValue不会只返回{itemId: 1, isDefault: true}吗?

新手加入JavaScript。我在这里想念什么?

4 个答案:

答案 0 :(得分:3)

map不合适,请使用find

export const getDefaultValue = (valueList) => {
    return defaultValue = valueList.find((item, index) => {
        if (item.isDefault) {
            return true;
        }
    });
}

您还可以简化它:

export const getDefaultValue = valueList => valueList.find(({ isDefault }) => isDefault);

答案 1 :(得分:2)

您需要使用Qt documentation过滤数组,这取决于返回值是否返回元素。

return defaultValue = valueList.filter(item => item.isDefault);

Array#filter为每个元素返回一个新元素。


一个明确的问题描述之后,您需要使用Array#map来获取单个对象。

此方法返回第一个找到的元素;如果没有满足条件,则返回undefined

return defaultValue = valueList.find(item => item.isDefault);

答案 2 :(得分:2)

由于您只想从数组中获取一个匹配值,因此应改用.find

export const getDefaultValue = (valueList) => {
    return defaultValue = valueList.find((item) => {
        if (item.isDefault) {
            return true;
        }
    });
};

.map将始终根据旧数组的所有项目构造一个新数组,这不是您想要的。

答案 3 :(得分:0)

Array.Map()方法返回值数组。由于您要返回的对象本身就是对象,因此最终输出将成为对象数组。

尝试一下:

 export const getDefaultValue = (valueList) => {
    return defaultValue = valueList.map((item, index) => {
        if (item.isDefault) {
            return item.itemId;
        }
    });
}

如果没有返回任何内容,还将捕获未定义的内容。您可以改为过滤方法。

const  getDefaultValue = valueList.filter(item => item.isDefault);