获取对象内部对象数组的长度

时间:2020-01-31 07:21:17

标签: javascript

在这种情况下,我想映射对象并获取在replies中可以找到的答复的数量/长度。我已经从API提取了此数据,但无法获取答复的数量可以在这里找到。


let data = [ 
   { 
      "feedbackId":32,
      "sender":"12345"
      "comment":"Test Comment",
      "replies":[ 
         { 
            "feedbackLogId":32,
            "feedbackReplyLogId":1,
            "comments":"So this is 1",
            "createdBy":"Jack",
         },
         { 
            "feedbackLogId":32,
            "feedbackReplyLogId":2,
            "comments":"2nd one",
            "createdBy":"Min",
         }
      ],
   }
]

这就是我所做的。我只能得到1作为长度。

let repliesToRender = data.map((item) => {item.replies})
let numReplies = repliesToRender.length

4 个答案:

答案 0 :(得分:1)

您的代码中有2个问题,

let repliesToRender = data.map((item) => {item.replies})

应该是

let repliesToRender = data.map((item) => item.replies)

然后map返回您的数组,因此您的repliesToRender将是一个数组的数组,因此您需要

let numReplies = repliesToRender[0].length

或者只是

let numReplies = data.replies.length

let data = [ 
   { 
      "feedbackId":32,
      "sender":"12345",
      "comment":"Test Comment",
      "replies":[ 
         { 
            "feedbackLogId":32,
            "feedbackReplyLogId":1,
            "comments":"So this is 1",
            "createdBy":"Jack",
         },
         { 
            "feedbackLogId":32,
            "feedbackReplyLogId":2,
            "comments":"2nd one",
            "createdBy":"Min",
         }
      ],
   }
]


let repliesToRender = data.map((item) => item.replies)
let numReplies = repliesToRender[0].length
console.log(numReplies)

答案 1 :(得分:1)

您可以使用Array.prototype.map

计算每个反馈的回复

要计算回复总数,可以使用Array.prototype.reduce

let data = [{"feedbackId":32,"sender":"12345","comment":"Test Comment","replies":[{"feedbackLogId":32,"feedbackReplyLogId":1,"comments":"So this is 1","createdBy":"Jack"},{"feedbackLogId":32,"feedbackReplyLogId":2,"comments":"2nd one","createdBy":"Min"}]},{"feedbackId":32,"sender":"12345","comment":"Test Comment","replies":[{"feedbackLogId":32,"feedbackReplyLogId":1,"comments":"So this is 1","createdBy":"Jack"},{"feedbackLogId":32,"feedbackReplyLogId":2,"comments":"2nd one","createdBy":"Min"}]}]

let repliesCount = data.map(({replies}) => replies.length);
console.log('per replies',repliesCount);

let totalCount = data.reduce((a,c) => a + c.replies.length, 0);
console.log('total replies ',totalCount)

答案 2 :(得分:0)

另一种方法。 如果数据集较大,这将运行得更快,因为它不使用循环。

let data = [ 
   { 
      "feedbackId":32,
      "sender":"12345",
      "comment":"Test Comment",
      "replies":[ 
         { 
            "feedbackLogId":32,
            "feedbackReplyLogId":1,
            "comments":"So this is 1",
            "createdBy":"Jack",
         },
         { 
            "feedbackLogId":32,
            "feedbackReplyLogId":2,
            "comments":"2nd one",
            "createdBy":"Min",
         }
      ],
   }
]

let {replies} = data[0];
console.log(replies.length);

答案 3 :(得分:0)

如果每个对象都需要答复计数,则下面将按顺序返回各个对象的答复计数数组,

let eachObjectsRepliesCount = data.map(({replies}) => replies.length);

如果所有合并对象都需要答复计数,则下面将返回总答复计数,

let repliesToRender = data.map((item) => item.replies)
let totalRepliesCount = repliesToRender[0].length