2016-10-28 24 views
-1

阵列我有这样如何分离在JavaScript

 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

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]; 
     } 
    } 
} 
+0

通过调试器走过你的代码,你会很快看到你的问题在哪里。 – 2016-10-28 09:41:16

+1

可能重复[什么是最有效的方法groupby在一个JavaScript数组的对象?](http://stackoverflow.com/questions/14446511/what-is-the-most-efficient-method-to-groupby- on-a-javascript-array-of-objects) –

回答

-1

尝试secong数组索引:

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'] 
+0

Downvoter:如何改进答案? – Oliver

+0

不是我的dv,但是你可以用一些更通用的代码替换'GRT'上的检查。 – msfoster

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); 
     } 
    }); 
} 
+0

为什么downvote? – H77