javascript - 计算数组中的元素,并将它们添加到数组中的 2 个对象中

标签 javascript arrays object

var arr = ['cat','cat','dog','penguin','chicken','chicken']

function orgAnimals(input)
   var obj = {};
   for (var i = 0 ; i < input.length; i++) {
      obj[input[i]] = obj[input[i]] || 0;
      obj[input[i]]++
   }
return obj;
}

所以这给了我{cat:2,dog:1,penguin:1,chicken:2,}

我想将对象分成 2 个不同的对象并将其放入一个数组中,使其看起来像

[{cat:2, dog:1} {penguin:1, chicken:2 }]

我尝试使用 if 语句来使其工作,但事实并非如此。 if (input[i]==='cat'||'dog') 仍然给我提供与以前相同的输出。

有什么提示吗?我是否错误地使用了运算符?

最佳答案

我想是高尔夫时间

var arr = ['cat','cat','dog','penguin','chicken','chicken']

function orgAnimals(input) {
    return input.reduce((a, b) => {
    	var i = ['cat','dog'].indexOf(b) === -1 ? 1 : 0;
      	return b in a[i] ? a[i][b]++ : a[i][b] = 1, a
    }, [{},{}]);
}

console.log( orgAnimals(arr) );

相同的逻辑,但更具可读性,您可以检查迭代值是否是 catdog 并根据条件插入到数组中

var arr = ['cat', 'cat', 'dog', 'penguin', 'chicken', 'chicken']

function orgAnimals(input) {
    var arr = [{}, {}];
    
    for (var i = 0; i < input.length; i++) {
    
        if ( input[i] === 'dog' || input[i] === 'cat') {
        	if ( input[i] in arr[0] ) {
            	arr[0][ input[i] ] = arr[0][ input[i] ] + 1;
            } else {
            	arr[0][ input[i] ] = 1;
            }
        } else {
        	if ( input[i] in arr[1] ) {
            	arr[1][ input[i] ] = arr[1][ input[i] ] + 1;
            } else {
            	arr[1][ input[i] ] = 1;
            }
        }
    }
    return arr;
}

console.log( orgAnimals(arr) )

关于javascript - 计算数组中的元素,并将它们添加到数组中的 2 个对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39964380/

相关文章:

javascript - Ajax数据嵌入页面而不是返回正确的结果

java - 打印 Java 数组的最简单方法是什么?

javascript - 如何获取该对象中所有属于文本的属性?

java - 如何将对象从一个 case 语句传递到另一个 case 语句

javascript - 套接字 io get 未定义

javascript - Div onclick e.target.id 不工作

javascript - moveRight(num) 问题!

java - 将 ByteArray 转换为固定长度字符串时出现异常

javascript - 数组显示其长度为 0 但控制台显示否则

c++ - 在运行时反复使用和对象的最佳实践是什么