如何从使用.find()调用的对象中提取属性值?

时间:2017-10-21 05:12:32

标签: javascript angular typescript

我的函数

中有这段代码
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);
}

2 个答案:

答案 0 :(得分:2)

如果您使用{}的箭头功能,则必须包含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(/ /,'_');

答案 1 :(得分:1)

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