亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Javascript 按倍數分組并在新字段中計數

Javascript 按倍數分組并在新字段中計數

萬千封印 2023-04-14 16:19:41
我對 JS 如此可笑地迷失了......我一直在嘗試幾個小時來做一些在 R 或 Python 中需要 5 秒才能完成的事情。努力學習只是為了這一項作業??梢哉f我有一個這樣的對象:myObject = [ {'location': 'california', 'day': 'wednesday', 'company': 'Tesla'},             {'location': 'washington', 'day': 'tuesday', 'company': 'Microsoft'},             {'location': 'california', 'day': 'wednesday', 'company': 'Tesla'},             {'location': 'california', 'day': 'monday', 'company': 'Apple'},             {'location': 'california', 'day': 'monday', 'company': 'SalesForce'}             {'location': 'washington', 'day': 'tuesday', 'company': 'Microsoft'},             {'location': 'california', 'day': 'wednesday', 'company': 'Apple'}            ]我想按地點和日期分組,計算不同公司的數量并得到如下輸出:myOutputObject = [ {'location': 'california', 'day': 'wednesday', 'count':2},                   {'location': 'washington', 'day': 'tuesday', 'count':1},                   {'location': 'california', 'day': 'monday', 'count':2}                 ]來自 python 背景的 JS 對我來說是一個噩夢。我嘗試在每個元素中創建一個“計數”鍵并將其設置為 0 以這樣開始:var dataset = []dataset = data.forEach(function(d){     d['count'] = 0;     return d})console.log(dataset);什么都沒有...zilch ...未定義...有人可以好心地向我解釋如何理解這些廢話嗎?
查看完整描述

2 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

你可以使用reduce


const myObject = [

  { location: 'california', day: 'wednesday', company: 'Tesla' },

  { location: 'washington', day: 'tuesday', company: 'Microsoft' },

  { location: 'california', day: 'wednesday', company: 'Tesla' },

  { location: 'california', day: 'monday', company: 'Apple' },

  { location: 'california', day: 'monday', company: 'SalesForce' },

  { location: 'washington', day: 'tuesday', company: 'Microsoft' },

  { location: 'california', day: 'wednesday', company: 'Apple' }

]


const res = myObject.reduce((acc, obj) => {

  const existingIndex = acc.findIndex(

    el => el.location === obj.location && el.day === obj.day

  )

  if (existingIndex > -1) {

    acc[existingIndex].count += 1

  } else {

    acc.push({

      location: obj.location,

      day: obj.day,

      count: 1

    })

  }

  return acc

}, [])


console.log(res)


查看完整回答
反對 回復 2023-04-14
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

你的開始不錯。但是,Array.forEach[?docs?] 返回undefined(+您實際上是在更新原始對象而不是添加到新對象中)。所以要修復你的開始,你必須做:

var?myOutputObject?=?[];
myObject.forEach(function(d)?{
??myOutputObject.push({...d,?count:?0});
})console.log(myOutputObject);

讓我們制定一個沒有二次時間復雜度的解決方案:

const myObject = [

? {location: 'california', day: 'wednesday', company: 'Tesla'},

? {location: 'washington', day: 'tuesday', company: 'Microsoft'},

? {location: 'california', day: 'wednesday', company: 'Tesla'},

? {location: 'california', day: 'monday', company: 'Apple'},

? {location: 'california', day: 'monday', company: 'SalesForce'},

? {location: 'washington', day: 'tuesday', company: 'Microsoft'},

? {location: 'california', day: 'wednesday', company: 'Apple'},

];


const m = new Map();

myObject.forEach(({day, location}) => {

? // Create a key with values that we want to group by

? // A list of key-value pairs is chosen to make use of `Object.fromEntries` later

? const hash = JSON.stringify([['day', day], ['location', location]]);

? m.set(hash, (m.get(hash) || 0) + 1);

});

const myOutputObject = [...m].map(([rec, count]) => ({

? ...Object.fromEntries(JSON.parse(rec)),

? count,

}))

console.log(JSON.stringify(myOutputObject));


查看完整回答
反對 回復 2023-04-14
  • 2 回答
  • 0 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號