簡體   English   中英

JavaScript: Function 創建 arrays 作為返回的 ZA8CFDE6331BD59EB2AC66F8911Z4B6 的值

[英]JavaScript: Function creates arrays as values of the returned object

我正在創建一個接受數組和回調並返回 object 的 function。 它旨在遍歷數組並對每個元素執行回調。 然后,回調的每個返回值都保存為 object 上的鍵。 與每個鍵關聯的值將是一個數組,該數組由傳遞給回調時產生該返回值的所有元素組成。

function groupBy(array, callback) {
  let obj = {};
  let newArr = [];
  //loop through each ele w/ callback
  //return value saved as key in obj obj[key] = value
  array.forEach(ele => {
    let key = callback(ele)
    obj[key] = callback(ele); 
    if (obj[key] === undefined) {
      obj[key] = array[ele]
      newArr.push(array[ele]);
        } else {
        newArr.push(obj[key]);
        }  
    });
  return obj;
}

function 應該創建 arrays 作為返回的 object 的值,但它沒有。 此外,如果回調在傳入時返回相同的值,它不會將數組項組合在一起。

測試用例:

const decimals = [1.3, 2.1, 2.4];
const floored = function(num) { return Math.floor(num); };
console.log(groupBy(decimals, floored)); // should log: **{ 1: [1.3], 2: [2.1, 2.4] }**

相反,我得到: { 1: 1, 2: 2 }</be expected { odd: 'odd', even: 'even' } 深度等於 {odd: [ 1, 3, 5 ], even: [ 2, 4 ] }

您的代碼存在不止 1 個問題。

首先,您正在使用obj[key] = callback(ele)分配keyobject[key]

其次,您正在推入newArr數組,但從未使用它。

下面的片段可能會對您有所幫助。

 function groupBy(array, callback) { let obj = {}; //loop through each ele w/ callback //return value saved as key in obj obj[key] = value array.forEach(ele => { let key = callback(ele) obj[key] = obj[key] || []; // ^^^^ Create an empty array if it doesn't exist obj[key].push(ele) }); return obj; } const decimals = [1.3, 2.1, 2.4]; const floored = function(num) { return Math.floor(num); }; console.log(groupBy(decimals, floored)); // should log: **{ 1: [1.3], 2: [2.1, 2.4] }**


更新

你也可以使用Array.reduce()

 function groupBy(array, callback) { return array.reduce((acc,cur) => { let key = callback(cur) acc[key] = acc[key] || []; acc[key].push(cur) return acc; },{}) } const decimals = [1.3, 2.1, 2.4]; const floored = function(num) { return Math.floor(num); }; console.log(groupBy(decimals, floored));

function groupBy(array, callback) {
  let obj = {};
  //loop through each ele w/ callback
  //return value saved as key in obj obj[key] = value
  array.forEach(ele => {
    let key = callback(ele)
    if (obj[key] === undefined) {
      obj[key] = [ele]
        } else {
        obj[key].push(ele);
        }  
    });
  return obj;
}

您不應該覆蓋密鑰,而是應該獲取數組並將其推送到數組。

 function groupBy(array, callback) { let obj = {}; let newArr = []; //loop through each ele w/ callback //return value saved as key in obj obj[key] = value array.forEach(ele => { let key = callback(ele) //obj[key] = key; let newArr = obj[key]; if (newArr === undefined) { newArr = new Array(); } newArr.push(ele); obj[key] = newArr; }); return obj; } const decimals = [1.3, 2.1, 2.4]; const floored = function(num) { return Math.floor(num); }; console.log(groupBy(decimals, floored));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM