使用""的正确方法是什么?运算符编译直方图?

时间:2016-04-21 05:51:59

标签: javascript

我正致力于为数组实现直方图函数,以便返回一个对象,该对象计算项目在该数组中出现的次数。但是,每当我运行此代码时,我都会收到一条错误消息,指出" in"运算符不能用于在对象内搜索。

var histogram = function(collection) {
  collection.reduce(function(combine, item){
    if(item in combine){
    combine[item]++;
    } else{
    combine[item] = 1;
    }
  }, {});
}
var arr = "racecar".split("");
console.log(hist(arr));

我猜测这里的问题是由in或reduce造成的,但我无法弄清楚它是什么。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

以下几点:1)hist不是函数名称,2)您没有从函数返回任何内容。如果您甚至没有正确调用该功能,并且控制台日志会警告您,我不确定您是如何得到该错误的。

var histogram = function(collection) {
  return collection.reduce(function(combine, item) {
    if (item in combine) {
      combine[item]++;
    } else {
      combine[item] = 1;
    }
    return combine;
  }, {});
}

DEMO

这是一个不使用in的简短版本:

var histogram = function(collection) {
  return collection.reduce(function (combine, item) {
    combine[item] = (combine[item] || 0) + 1;
    return combine;
  }, {});
}

DEMO

答案 1 :(得分:0)

in operator的问题在于它不仅搜索数组索引,还搜索Array对象的所有继承属性。

var ar = [];

'toString' in ar; // prints true
'length' in ar; // prints true

在不正确的上下文中使用(查找数组中的索引)时,可能会引入以后很难调试的潜在问题。

在您的情况下,最好使用Array.prototype.indexOf()Array.prototype.includes()(来自ES6)。