在下面的代码中有一个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']);
答案 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]
是一个数组,那么你需要遍历该数组。