如果我有这样的数组,我怎么能循环并将计数推入一个新数组呢? 所有的帮助都会成功!
var Products = [
['Product A'],
['Product A'],
['Product A'],
['Product A'],
['Product A'],
['Product B'],
['Product B'],
['Product B'],
['Product B'],
['Product B'],
['Product B'],
['Product B'],
['Product B'],
['Product B'],
['Old Product B'],
['Old Product B'],
['Old Product B'],
['Old Product B'],
['Old Product B'],
['Old Product]
];
结束目标:
var UniqueProducts = [
['Product A',5],
['Product B',6],
['Old Product B',9]
];
答案 0 :(得分:5)
var obj = {};
for (var i = 0, l = Products.length; i < l; i++) {
obj[Products[i][0]] = obj[Products[i][0]] || 0;
obj[Products[i][0]] += 1;
}
console.log(obj);
请参阅此小提琴http://jsfiddle.net/XWSRE/1/
但在问这些问题之前,请谷歌一次。这是非常通用的要求,您可以在大多数地方找到解决方案。
答案 1 :(得分:1)
你可以这样做:
var prod_array = []
for(p in Products) {
prod_array[p] = (prod_array[p] ? 1 : prod_array[p] +1)
}
答案 2 :(得分:0)
@ Exception的答案已经提供了一种明智的方法,但对于完全输出,我遍历对象属性以转换为数组:
var u = {}, uniqueProducts = [];
Products.forEach(function (v) {
if (u[v[0]]) {
u[v[0]] += 1;
} else {
u[v[0]] = 1;
}
});
for (var property in u) {
if (u.hasOwnProperty(property)) {
uniqueProducts.push([property, u[property]]);
}
}
console.log(uniqueProducts);
请参阅jsFiddle。
答案 3 :(得分:0)
完成了一些预期结果的简单编码。 http://jsfiddle.net/y9a8L/
function GroupBy(arrParam)
{
var result = [];
var lastItem = null;
var item = null;
var index = -1;
for (var i = 0; i < arrParam.length ; i++ )
{
item = arrParam[i][0];
if (lastItem != item)
{
result.push([item,1]);
index++;
}
else
{
result[index][1]++;
}
lastItem = item
}
console.log(result)
}
GroupBy(Products);