查找数组中特定对象的长度

时间:2016-06-12 11:40:12

标签: javascript

在下面的代码中有一个obj['mn']的控制台日志,它返回该特定对象的长度为2.代码的问题是它不计算多维数组,并且只计算它计算第一个数组。结果应为4,因为总共有4 'mn'。我做错了什么?

var arr = [['ab','pq','mn','ab','mn','ab'],'mn','mn'];
var obj = { };
for (var i = 0, j = arr.length; i < j; i++) {
   if (obj[arr[i]]) {
      obj[arr[i]]++;
   }
}
console.log(obj['mn']);

2 个答案:

答案 0 :(得分:1)

这就是你要找的东西:

var arr = [['ab','pq','mn','ab','mn','ab'],'mn','mn'];
var obj = { };

function count(arr, obj) {
    for (var i = 0, j = arr.length; i < j; i++) {
       if (Array.isArray(arr[i])) {
           count(arr[i], obj);
       }
       else if (typeof obj[arr[i]] !== 'undefined') {
           obj[arr[i]]++;
       }
       else {
           obj[arr[i]] = 1;
       }
    }
    return obj;
}

console.log(count(arr, obj));

这是一个递归实现。当它到达一个数组时,递归会更深一层。

答案 1 :(得分:-1)

您正在呼叫obj[['ab','pq','mn','ab','mn','ab']],这显然不是您想要的。

您需要深度优先搜索。

如果arr[i]是一个数组,那么你需要遍历该数组。