第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Javascript在按屬性分組的數(shù)組中收集對象值

Javascript在按屬性分組的數(shù)組中收集對象值

拉丁的傳說 2022-01-01 18:34:12
我從 API 響應(yīng)中收到以下數(shù)組:[   {group: '1', , value: 'a'}  {group: '1', , value: 'b'}  {group: '2', , value: 'c'}  {group: '2', , value: 'd'}]  我想將其轉(zhuǎn)換為以下內(nèi)容(希望收到的組順序,值可以以任何方式排序):[  {group: '1', values: ['b', 'a'] },  {group: '2', values: ['c', 'd'] },]哪個 Javascript 函數(shù)將最有效地轉(zhuǎn)換它?我可以通過以下方式做到這一點:let result = [];data.reduce((groupNumber, input) => {  if (!groupNumber[input.group]) {     groupNumber[input.group] = {group: input.group, values: []};     result.push(groupNumber[input.group]);  }  groupNumber[input.group].values.push(input);  return groupNumber;}, {});難道reduce要在此處使用了正確的功能?有沒有更有效的方法?其次,會reduce保留結(jié)果中的順序嗎?如果我實際上首先接收第 1 組條目的數(shù)據(jù),然后是第 2 組條目,依此類推,我result是否可以依賴類似的排序?請注意,我只關(guān)心組的順序,而不關(guān)心組內(nèi)的值。
查看完整描述

2 回答

?
蠱毒傳說

TA貢獻1895條經(jīng)驗 獲得超3個贊

我會保存我的回復(fù),因為我們有一個很好的解釋,為什么您的方法很棒,因為您有O(N)計算復(fù)雜性(感謝對@CertainPerformance的精彩評論)并且您只迭代一次數(shù)組。


測試reduce方法是否保留對象鍵的順序:


看起來reduce方法沒有保留鍵的順序。在這里,我們看到鍵是按順序排序的,然后如何遍歷源數(shù)組myArray,但是在 Chrome 瀏覽器中,這種行為是不可重現(xiàn)的(鍵是排序的):


var myArray = [{letter: 'c'}, {letter:'e'}, {letter: 'e'}, {letter:'b'}, {letter: 'c'}, {letter:'a'}, {letter:'b'}, {letter:'a'}, {letter: 'd'}, {letter: 'd'}, {letter: 'd'}, {letter: 'd'}];

var myOrderedKeys = myArray.reduce((a, {letter}) => {

a[letter] = a[letter] || letter;

a[letter] = letter;


return a;

}, {})


console.log(myOrderedKeys);


我們有多個字母的一個例子:


let notSimpleLetters = [{letter: 'ce'}, {letter:'ec'}, {letter: 'ec'}, {letter:'bw'}, {letter: 'ce'}, {letter:'aw'}, {letter:'ba'}, {letter:'aa'},

                    {letter: 'df'}, {letter: 'cb'}, {letter: 'dc'}, {letter: 'da'}];

let notSimpleKeys = notSimpleLetters.reduce((a, {letter}) => {

a[letter] = a[letter] || letter;

a[letter] = letter;


return a;

}, {})


console.log(notSimpleKeys);


查看完整回答
反對 回復(fù) 2022-01-01
?
LEATH

TA貢獻1936條經(jīng)驗 獲得超7個贊

實際上,無論是通過 usingreduce()還是任何其他Array方法,順序都將被保留,因為它們將從索引 0 執(zhí)行到array.


但reduce()主要用于將array元素累積成單個元素,這不是做這種事情的最佳方法,但也可以使用。


請注意,您使用的實際代碼reduce()沒有返回正確的輸出。


在我看來,我認為在這種情況下Array.map()方法更好,但它應(yīng)該與Array.filter()刪除重復(fù)的元素結(jié)合使用map():


var result = data.map(v => {

  v.values = data.filter(e => e.group == v.group).map(x => x.value);

  delete v.value;

  return v;

}).filter(x => !x.values.some(e => !e));

演示:

let data = [{

  group: '1',

  value: 'a'

}, {

  group: '1',

  value: 'b'

}, {

  group: '2',

  value: 'c'

}, {

  group: '2',

  value: 'd'

}];



var result = data.map(v => {

  v.values = data.filter(e => e.group == v.group).map(x => x.value);

  delete v.value;

  return v;

}).filter(x => !x.values.some(e => !e));


console.log(result);


查看完整回答
反對 回復(fù) 2022-01-01
  • 2 回答
  • 0 關(guān)注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號