遍历对象数组并检查它是否具有给定属性或不使用 typescript 或 javascript

在我的 Angular 6 应用程序中,我有以下从后端检索的 json 对象。


"participants": [{

        "dateJoin": 1520409578,

        "dateLeft": 0,

        "firstName": "edh",

        "internalId": 165,

        "invitedBy": "edh",

        "lastName": "edh",

        "userId": "edh",

        "key":"data"


    }, {

        "dateJoin": 1520409578,

        "dateLeft": 0,

        "firstName": "",

        "internalId": 166,

        "invitedBy": "edh",

        "lastName": "",

        "userId": "ATB"

    }],

    "dataInAB": "ATB",

    "subject": "test ",

    "unreadMessageCount": 0,

    "updateDate": 1520585258,

    "updatedBy": "atb"

}

在上面的对象数组中,我想知道它是否具有名为 key 的属性?如果不是,它将检查另一个对象并使用打字稿检查它。密钥的位置可以存在于任何参与者的对象中。如果它存在于任何地方,则返回它的值。


我知道使用 hasOwnProperty 但我不确定它是否会遍历所有对象?谢谢


浮云间
浏览 140回答 3
3回答

aluckdog

试试这样:getValueOfKey() {    for (var obj of this.data.participants) {      if(obj.hasOwnProperty('key')){         return obj.key;      }    }}

临摹微笑

如果要检查数组是否具有具有key属性的对象,请使用some方法。如果要获取数组中具有key属性的所有对象,请使用filter方法:const arr = [{    "dateJoin": 1520409578,    "dateLeft": 0,    "firstName": "edh",    "internalId": 165,    "invitedBy": "edh",    "lastName": "edh",    "userId": "edh",    "key": "data"}, {    "dateJoin": 1520409578,    "dateLeft": 0,    "firstName": "",    "internalId": 166,    "invitedBy": "edh",    "lastName": "",    "userId": "ATB"}];const hasKey= arr.some(s => s.key);console.log(`hasKey: ${hasKey}`);const objectsWithKeyProperties = arr.filter(f => f.key);console.log(`objectsWithKeyProperties :`, objectsWithKeyProperties);

慕田峪4524236

您可以使用过滤器Array.prototype.filter()从与您的过滤器匹配的数组中检索所有元素。该函数接受一个回调函数作为必须返回true以保留元素或false删除元素的参数。该函数返回一个包含与过滤器匹配的所有元素的新数组:const result = [1, 2, 3, 4, 5].filter((num) => num > 3);// result will look like this: [4, 5]对于您的问题,您将检查所需的属性是否为undefined:participants.filter((participant) => participant.key !== undefined);此函数将返回一个新数组,其中包含所有具有名为key的属性的对象。我们可以使用一些 Javascript 魔法来缩短事件并省略!== undefined检查,因为在一个if条件下,undefined等于 false 并且任何其他结果(除了 boolean false)等于true:participants.filter((participant) => participant.key);片段:console.log([1, 2, 3, 4, 5].filter((num) => num > 3));const participants = [  {name: "John", key: "zero"},  {name: "Prince"}];console.log(participants.filter((participant) => participant.key));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript