javascript - 计算数组中有多少个对象具有特定值(JavaScript)

标签 javascript

我有一个对象数组,如下所示:

[
{
"_id": "5b09cc3495cb6c0487f1166b",
"name": "ccc",
"email": "ccc@gmail.com",
"phone": "790467522",
"kidsNo": "1",
"adultsNo": "1",
"fullDate": "2018/5/1",
"year": "2018",
"month": "5",
"day": "1",
"chosenHour": "11:00",
"chosenRoom": "x",
"__v": 0
},
{
"_id": "5b09cc6095cb6c0487f1166c",
"name": "asd",
"email": "asd@asd.pl",
"phone": "790467522",
"kidsNo": "2",
"adultsNo": "3",
"fullDate": "2018/5/1",
"year": "2018",
"month": "5",
"day": "1",
"chosenHour": "12:00",
"chosenRoom": "x",
"__v": 0
},
{
"_id": "5b0b1560c7b4fd0c33b2d52e",
"name": "dddd",
"email": "dddd@ddd.pl",
"phone": "123123112",
"kidsNo": "2",
"adultsNo": "1",
"fullDate": "2018/5/17",
"year": "2018",
"month": "5",
"day": "17",
"chosenHour": "11:00",
"chosenRoom": "x",
"__v": 0
}
]

将来这个数组将包含更多的对象。 我正在尝试使用 map 来解决这个问题,因为它似乎相当复杂。 这就是挑战: 我如何计算有多少对象具有一定的值(value)?我怎样才能知道有人今天预订了多少次===1?最好的结果是这样的数组:

[{dayOne: 2}, {dayTwo: 5}, {dayThree:1}.......and so on], 

其中value是一天被预订的次数(键)的值,因此某个对象(具有特定值)在数组中出现了多少次?

提前谢谢您!

最佳答案

要按条件对对象进行计数,您可以使用 .filter --

let firstDayCount = arr.filter(x => x.day === "1").length;

要按天对结果进行分组,您可以使用 .reduce --

let countByDays = 
  arr.reduce((res, { day }) => {
     res[day] = res[day] || 0;
     res[day] += 1;
     return res; 
   }, {}); 

如果您想格式化输出,则可以使用名称字典 --

let dayNames = { 1: "dayOne", 2: "dayTwo" /* and so on */}

let formattedResult = 
  Object.keys(countByDays)
    .map(n => { [dayNames[n]]: countByDays[n] });
<小时/>

请注意,使用 .filter用于计数创建一个中间丢弃数组。我们不会在任何地方存储引用,因此必须尽快对其进行 GC,但如果它确实在现实场景中显着影响您的性能,您可以使用 .reduce相反 - 名为 "deforestation" 的东西:)

let count = arr.reduce((cnt, el) => el.day === "1" ? cnt += 1 : cnt, 0);

它仍然会创建一个中间匿名对象——一个reducer函数——所以如果你的分析器显示这个地方是瓶颈,你可能最好使用 for环形。与往常一样,在这种情况下,您需要在自己的实际场景中找到性能和可读性之间的正确位置。

关于javascript - 计算数组中有多少个对象具有特定值(JavaScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50556853/

相关文章:

Javascript:使用 Jquery 在父输入中键入时更新标签内容

javascript - 使用 Google Drive API 上传大文件

javascript - 在 Chrome 中获取 scrollTop

javascript - 我想监听服务器上的变化并相应地更新我的网页。我怎样才能用 JavaScript 做到这一点?

javascript - 计算属性名称({[a] : 1}) in Google Chrome

javascript - 如何改进 JavaScript 的结构以更好地利用 OOP

javascript - 如何使用javascript从起始索引中提取字符串到空白字符?

javascript - Uncaught Error : Parse Error: Line 13: Unexpected identifier

javascript - 可以将 Catch block 留空导致 JavaScript 中的问题

javascript - 在 React.JS 中将 props 的值从函数传递给 render()