通过比较另一个数组中的值在 JavaScript 中创建数组

Creating arrays in JavaScript by comparing values in another array

本文关键字:数组 JavaScript 创建 另一个 比较      更新时间:2023-09-26

在JavaScript中,我正在尝试根据另一个数组的值创建数组,但我遇到了困难。

我有一个字符串格式的日期数组(日期),例如

["30/09/2015", "31/10/2015", "30/11/2015", "31/12/2015"]

我有一个对象来表示多个银行账户(balancesSortByAccId),例如

Cash - (Array size: 3)
id: 1, date: "30/09/2015", balance: 30
id: 2, date: "31/10/2015", balance: 50
id: 3, date: "30/11/2015", balance: 100
Natwest - (Array size: 2)
id: 4, date: "30/11/2015", balance: 400
id: 5, date: "31/12/2015", balance: 200

在循环遍历balancesSortByAccId中的所有帐户时,我希望能够为日期数组中每个日期的余额创建一个数组,即

[30, 50, 100, null]
[null, null, 400, 200]

我怎样才能做到这一点?

更新:jsfiddle 代码 - https://jsfiddle.net/gx8bLehb/

最简单的方法是将cash数组和natwest数组转换为按日期排序的哈希,如下所示 balancesByDate

    var balancesByDate = _.groupBy(cash, function(entry) {return entry.date});

然后使用数组map()函数,例如从 lodash 迭代dates数组,并为每个日期查找balancesByDate哈希中的帐户行。从该行中,返回 map 函数中的 balance 属性。

dates.forEach(function(date){
  if (balancesByDate[date]) {
    results.push(_.map(balancesByDate[date], function(line){
       return line.balance;
    }));
  } else {
    results.push(null);
  }
});

但是,您需要注意,您的数据集很可能包含一天的重复余额,您应该为此做好计划(我的代码每天返回一个数组)。

https://jsfiddle.net/hdpuuc5d/1/

JavaScript中的解决方案,带有日期的辅助对象:

var dates = ["30/09/2015", "31/10/2015", "30/11/2015", "31/12/2015"],
    datesObj = dates.reduce(function (r, a, i) { r[a] = i; return r; }, {}),
    balances = {
        Cash: [
            { id: 1, date: "30/09/2015", balance: 30 },
            { id: 2, date: "31/10/2015", balance: 50 },
            { id: 3, date: "30/11/2015", balance: 100 }
        ],
        Natwest: [
            { id: 4, date: "30/11/2015", balance: 400 },
            { id: 5, date: "31/12/2015", balance: 200 }
        ]
    },
    result = {};
Object.keys(balances).forEach(function (k) {
    result[k] = Array.apply(null, { length: dates.length }).map(function () { return null; });
    balances[k].forEach(function (a) {
        result[k][datesObj[a.date]] = a.balance;
    });
});
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');