【问题标题】:How do I extract a property value from an object called with .find()? [duplicate]如何从使用 .find() 调用的对象中提取属性值? [复制]
【发布时间】:2017-10-21 05:12:31
【问题描述】:

我的函数中有这段代码

let packName: string = respPack.find(a => {a.id == 'name_input'}).answer.replace(/ /,'_');

我要做的是通过匹配 id 找到对象并提取它的 answer 属性的值。截至目前,我收到一条错误消息告诉我

无法读取未定义的属性答案。

我是否尝试以正确的方式做到这一点?这是我的函数的其余部分,所以你可以看到发生了什么。

saveResponses(){
    const respPack = this.ResponseList;
    const sendTarget: FirebaseObjectObservable<any> = this.afdb.object('/submissions');

    let dataLoad:{ [prop : string]: Array<any> } = {};
    let packName: string = respPack.find(a => {a.id == 'name_input'}).answer.replace(/ /,'_');

    respPack.forEach( a => {
        if(a.answer){
            let data = { question: a.question, answer: a.answer, id: a.id };
            dataLoad[packName].push(data);
        }
        else if(a.responses){
            let dataChunk = { question: a.question, id: a.id, responses: Array<any> }; 

            a.responses.forEach(resp => {
                let respChunk = { response: resp.response, value: resp.value, id: resp.id };
                dataChunk.responses.push(respChunk);
            });
            dataLoad[packName].push(dataChunk);
        }
    });

    sendTarget.set(dataLoad);
}

【问题讨论】:

  • 你能用===代替==吗?
  • 如果packNameundefined 会发生什么?

标签: javascript angular typescript


【解决方案1】:

如果您在 {} 中使用箭头函数,则必须包含 return

例如:

a => {return a.id == 'name_input'} 

另外,find 将返回 undefined,如果没有找到任何项目,您将不得不处理这些情况。

这是一个完整的例子:

let packName: string = "";
let foundElement = respPack.find(a => {
                              return a.id == 'name_input';
                            });
if(foundElement){
    packName = foundElement.answer.replace(/ /,'_');
}

或者如果你想保持一行。

let packName: string = ((respPack.find(a => a.id == 'name_input') || {}).answer || "").replace(/ /,'_');

【讨论】:

  • 谢谢。我发现我只需要添加 return 就可以了。
【解决方案2】:

yourArray.find(element) 将重新运行元素以下是一个示例

了解有关 find() 的更多信息

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

var inventory = [
    {name: 'apples', quantity: 2},
    {name: 'bananas', quantity: 0},
    {name: 'cherries', quantity: 5}
];

function findCherries(fruit) { 
    return fruit.name === 'cherries';
}

console.log(inventory.find(findCherries)); 
// { name: 'cherries', quantity: 5 }

您在调用 find 方法时遇到问题

a => {return a.id == 'name_input'} 

了解更多关于箭头函数的信息

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

【讨论】:

    猜你喜欢
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多