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

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

如何合并兩個數組并對它們的值求和?

如何合并兩個數組并對它們的值求和?

江戶川亂折騰 2023-07-14 09:51:25
有兩個數組,我想合并兩個數組,并僅在數據名稱匹配時對它們求和。否則,如果名稱不匹配,則僅合并或推送數組var demo = {    "key1": [{"id": 1, "name": "Robbie", "kill": 12 , "knock": 1},                    {"id": 2, "name": "Mohamand", "kill": 12 , "knock": 4},                   {"id": 3, "name": "Jebisha", "kill": 8 , "knock": 4}],    "key2": [                 {"id": 1, "name": "Robbie", "kill":12  , "knock": 4},                  {"id": 2, "name": "Mohamand", "kill": 13 , "knock": 3},                 {"id":3, "name": "Jebisha", "kill": 5 , "knock": 1},                 {"id":4, "name": "Alvida", "kill": 8 , "knock": 5}]};這是我的腳本文件var res = demo.key1.map(function(item, idx) {    return Object.keys(item).reduce(function(obj, key) {        if (key == 'name') {            obj[key] = item[key];        } else {            obj[key] = item[key] + demo.key2[idx][key];        }        return obj;    }, {});});console.log(res);我的結果是這樣的0:  {id: 1, name: "Robbie", "kill: 24 , knock: 5},1:  {id: 2, name: "Mohamand","kill: 25 , knock: 7},2:  {id: 3, name: "Jebisha", "kill: 13 , knock: 5},我的預期輸出是這樣的0:  {id: 1, name: "Robbie", "kill: 24 , knock: 5},1:  {id: 2, name: "Mohamand","kill: 25 , knock: 7},2:  {id: 3, name: "Jebisha", "kill: 13 , knock: 5},3:  {"id":4, "name": "Alvida", "kill": 8 , "knock": 5}
查看完整描述

5 回答

?
HUH函數

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

您缺少最后一個元素,因為您只迭代第一個數組并在第二個數組中搜索匹配項,但“Alvida”僅存在于第二個數組中。因此,您需要做的是在構建新數組時迭代兩個數組。如果新數組中已存在屬性,則對值求和,如果不存在則創建它。


說明性示例:


const results = {};

// arrayToInspect is key1, key2

Object.keys(demo).forEach(function(arrayToInspect) {

  demo[arrayToInspect].forEach(function(element) {

    if (results[element.name]) {

      results[element.name].kill += element.kill;

      results[element.name].knock += element.knock;

    }

    else {

      results[element.name] = element;

    }

  });

});

然后,如果您需要它作為數組,您可以這樣做:


const resultsArray = Object.values(results);


查看完整回答
反對 回復 2023-07-14
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

  1. Object.keys(demo).reduce檢查每個demo鍵。

  2. demo[key].map迭代每個 的數據"key"。

  3. 如果數據存在 => 對 和 求和kill,knock否則 => 將其相加。

給你:D

let demo = {

  "key1": [{

      "id": 1,

      "name": "Robbie",

      "kill": 12,

      "knock": 1

    },

    {

      "id": 2,

      "name": "Mohamand",

      "kill": 12,

      "knock": 4

    },

    {

      "id": 3,

      "name": "Jebisha",

      "kill": 8,

      "knock": 4

    }

  ],


  "key2": [{

      "id": 1,

      "name": "Robbie",

      "kill": 12,

      "knock": 4

    },

    {

      "id": 2,

      "name": "Mohamand",

      "kill": 13,

      "knock": 3

    },

    {

      "id": 3,

      "name": "Jebisha",

      "kill": 5,

      "knock": 1

    },

    {

      "id": 4,

      "name": "Alvida",

      "kill": 8,

      "knock": 5

    }

  ]

};


let ans = [];

Object.keys(demo).reduce((acc, key) => {

  demo[key].map(data => {

    let found = acc.find(d => d.id === data.id);

    if (found) {

      found.kill += data.kill;

      found.knock += data.knock;

    } else {

      acc.push(data);

    }

  });

  return acc;

}, ans);


console.log(ans);


查看完整回答
反對 回復 2023-07-14
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

這個怎么樣?

  1. 使用地圖收集數據然后計算總和

  2. 使用 [key, value] 迭代映射來構建數組

var demo = {

    "key1": [{

            "id": 1,

            "name": "Robbie",

            "kill": 12,

            "knock": 1

        },

        {

            "id": 2,

            "name": "Mohamand",

            "kill": 12,

            "knock": 4

        },

        {

            "id": 3,

            "name": "Jebisha",

            "kill": 8,

            "knock": 4

        }

    ],

    "key2": [{

            "id": 1,

            "name": "Robbie",

            "kill": 12,

            "knock": 4

        },

        {

            "id": 2,

            "name": "Mohamand",

            "kill": 13,

            "knock": 3

        },

        {

            "id": 3,

            "name": "Jebisha",

            "kill": 5,

            "knock": 1

        },

        {

            "id": 4,

            "name": "Alvida",

            "kill": 8,

            "knock": 5

        }

    ]

};


function merge(demo) {

    let map = new Map()


    let _calculate = function cal(arr) {

        for (const item of arr) {

            if (!map.has(item.id)) {

                map.set(item.id, {id: item.id, name: item.name, kill: 0, knock: 0})

            }

            const obj = map.get(item.id);

            obj.kill += item.kill

            obj.knock += item.knock

            map.set(item.id, obj)

        }

    }


    Object.keys(demo).forEach(key => {

        _calculate(demo[key])

    })

    

    let arr = []

    for (const [key, value] of map) {

        arr.push(value)

    }

    return arr;

}



console.log(merge(demo));


查看完整回答
反對 回復 2023-07-14
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

const demo = {

"key1": [{"id": 1, "name": "Robbie", "kill": 12 , "knock": 1}, 

               {"id": 2, "name": "Mohamand", "kill": 12 , "knock": 4},

               {"id": 3, "name": "Jebisha", "kill": 8 , "knock": 4}],


"key2": [

             {"id": 1, "name": "Robbie", "kill":12  , "knock": 4}, 

             {"id": 2, "name": "Mohamand", "kill": 13 , "knock": 3},

             {"id":3, "name": "Jebisha", "kill": 5 , "knock": 1},

             {"id":4, "name": "Alvida", "kill": 8 , "knock": 5}]

};


const res = Object.values(demo).reduce((acc, value) => {

const currentElements = value;

currentElements.forEach((el) => {

    if (!acc[el.id]) {

        acc[el.id] = el

    } else {

        acc[el.id] = {

            ...acc[el.id], 

            "kill": acc[el.id]["kill"] + el["kill"],

            "knock": acc[el.id]["knock"] + el["knock"],    

        }

    }

});

return acc;

}, {});

console.log(res);


查看完整回答
反對 回復 2023-07-14
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

你可以試試這個。這里有多少個鍵并不重要。當您維護一個對象來檢查指定對象是否存在時,速度會更快。


var demo = {

    "key1": [

        {"id": 1, "name": "Robbie", "kill": 12 , "knock": 1}, 

        {"id": 2, "name": "Mohamand", "kill": 12 , "knock": 4},

        {"id": 3, "name": "Jebisha", "kill": 8 , "knock": 4}

    ],

    "key2": [

      {"id": 1, "name": "Robbie", "kill":12  , "knock": 4}, 

      {"id": 2, "name": "Mohamand", "kill": 13 , "knock": 3},

      {"id":3, "name": "Jebisha", "kill": 5 , "knock": 1},

      {"id":4, "name": "Alvida", "kill": 8 , "knock": 5}

    ]

};


const res = {};


Object.values(demo).forEach(items => items.reduce((acc, curr) => {

  if (res[curr.name] !== undefined) {

    res[curr.name].kill += curr.kill;

    res[curr.name].knock += curr.knock;

  } else {

    res[curr.name] = curr;

  }

  return res;

}, res));


const result = Object.values(res);

console.log(result);

.as-console-wrapper {min-height: 100%!important; top: 0}


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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