如何在javascript中分离数组

时间:2016-10-28 09:30:08

标签: javascript arrays

我有一个像这样的数组对象

      dta: [
        {
           amt: "200000",
           dat: "2016-10-14 10:41:20 am",
           grt: "GRT",
           uid:"example123"
        },
        {
           amt: "300000",
           dat: "2016-10-14 10:41:20 am",
           grt: "RPD",
           uid:"example123"
        }]

我希望根据grt:

将这个数组分成两个数组

我尝试了这个,但它从1开始了secong数组索引。

function seperate(data) {
console.log(data)
for (var i = 0; i < data.dta.length; i++) {
       if (data.dta[i].grt === 'GRT') {
            owing[i] = data.dta[i];
       } else {
            repaid[i] = data.dta[i];
       }
   }
}

2 个答案:

答案 0 :(得分:0)

您的代码正在增加与数组无关的索引。因此,无论更新哪个数组,您用于两个数组的索引都会增加1.

您可以为每个数组分别使用索引变量,也可以使用数组forEachpush函数,如下所示。

var owing = [];
var repaid = [];
function seperate(data) {
    data.dta.forEach(function(d) {
        if (d.grt === 'GRT') {
            owing.push(d);
        } else {
            repaid.push(d);
        }
    });
}

答案 1 :(得分:-1)

尝试:

function seperate(data) {
console.log(data)
for (var i = 0; i < data.dta.length; i++) {
       if (data.dta[i].grt === 'GRT') {
            owing.push(data.dta[i]);
            // console.log(owing[i] + i);
       } else {
            repaid.push(data.dta[i])
            // console.log(repaid[i] + i);
       }
   }
}

.push将新元素添加到给定数组的末尾。 Documentation。用法示例:

var a = [1, 2, 3];
a.push(4, 5);

console.log(a); // [1, 2, 3, 4, 5]

您当前的解决方案会创建两个数组,每个数组的长度(几乎)等于输入数组,但其中有很多个洞。例如,考虑(简化)输入数组如下:

['GRT', 'RPD', 'GRT', 'RPD', 'GRT', 'RPD']

您的解决方案会创建两个这样的数组:

['GRT'    , undefined, 'GRT'    , undefined, 'GRT']
[undefined, 'RPD'    , undefined, 'RPD'    , undefined, 'RPD']

使用push代替创建两个这样的数组:

['GRT', 'GRT', 'GRT']
['RPD', 'RPD', 'RPD']