簡體   English   中英

使用 Javascript 有沒有辦法將信息推送到鍵/值對之外的數組中?

[英]Using Javascript is there a way to push information into an array that is apart of a key/value pair?

我在使用這個算法時遇到了問題,希望得到任何人的支持!

基本上我的麻煩出現在第 7 行。
在這里,我設法為每個元素創建一個鍵,同時分配一個與我們正在使用的當前鍵匹配的值。
但是如果你注意到我的 output,而不是得到{ 1: [1.3], 2: [2.1, 2.4] }
我正在輸出{ 1: [1.3], 2: [2.4] }

function groupBy (array, callBack) {
    const myObj = {};
    let numsA = [];
    // iterate over array
    array.forEach(element => {
        //each element perform callBack
        myObj[callBack(element)] = [element];
        // console.log(myObj)
    })
    // return an object
    return myObj
};

const decimals = [1.3, 2.1, 2.4];
const floored = function(num) { return Math.floor(num); };

console.log(groupBy(decimals, floored)); 

// log: { 1: [1.3], 2: 2.4] }
// should log: { 1: [1.3], 2: [2.1, 2.4] } 

鍵/值對對象是否有像 arrays 那樣的 a.push() 功能?
如何向第二個鍵的數組添加一個值而不是覆蓋它?

嘗試改變

myObj[callBack(element)] = [element];

對此:

if (myObj[callBack(element)] == undefined)
    myObj[callBack(element)] = [element];
else
    myObj[callBack(element)].push(element);

這個想法是,如果存在數組,則將添加元素。 否則,將創建一個新數組,其中包含元素。


正如@RobbyCornelissen 指出的那樣, callBack function 運行了多次。 這是一個更優化的版本:

var output = callBack(element);
if (myObj[output] == undefined)
    myObj[output] = [element];
else
    myObj[output].push(element);

您可以使用 for in 方法來遍歷 object 和數組或嘗試數組查找

您可以在一個簡單的reduce()操作中捕獲所有內容:

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

為了進一步 Robby 的貢獻 - 您可以將樓層 function 傳遞到 groupBy

const groupBy = (array, callback) => array.reduce((a, v) => {
  const key = callback(v);
  a[key] = [...(a[key] || []), v];
  return a;
}, {});


const decimals = [1.3, 2.1, 2.4];

console.log(groupBy(decimals, Math.floor)); 

暫無
暫無

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

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