首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >记录某些数字的出现

记录某些数字的出现
EN

Code Review用户
提问于 2017-04-17 12:05:52
回答 3查看 2.6K关注 0票数 3

这实际上属于一个更大的面试问题。但这里只是“总结”部分:

代码语言:javascript
复制
var i, a, tally = {}, arr = [1, 3, 7, 9, 3, 1, 6, 3, 3, 2, 11, 2];

for (i = 0; i < arr.length; i++) {
    a = arr[i];
    tally[a] = (tally[a] || 0) + 1;
}
console.log(tally);

当我说我将使用行tally[a] = (tally[a] || 0) + 1;而不是使用if. else或三元运算符来做这件事时,我有一些感觉面试官对此并不满意或不满意(或者他们不理解)。

EN

回答 3

Code Review用户

发布于 2017-04-17 12:24:06

(may_be_num || 0) + 1非常好,在JavaScript中是惯用的,所以这不应该是一个问题。

对于一个数字来说,a这个名字不是很好。num会更好。

除此之外,我怀疑这段简单的代码是否会有重大问题,所以如果面试官对某件事不满意,那可能是别的地方了。

票数 2
EN

Code Review用户

发布于 2017-04-17 20:29:19

你的面试官是否因为你没有处理类型转换而感到烦恼?当将这些值映射到对象时,可以将数值进行隐式转换,并将其转换为字符串,因此,如果稍后要求您输出包含每个值的原始值,则可能需要将其转换为数字。

票数 0
EN

Code Review用户

发布于 2017-04-20 17:26:54

关于最初的问题,我要指出的是,您使用的是一般的for循环,但是还有其他更简洁的方法来构建这个逻辑。

也许我们可以假设,利用更多可用语言的受访者更有资格担任发展职位。

作为一个大型项目的开发人员,如果我继续在堆栈中运行for循环,而不是映射、缩减、筛选等等.我认为需要进行一些培训;

因为更少的仍可读的代码总是目标:更少的变量,更少的行,更少的理解时间……

下面是我对约瑟夫的评论的回答。我张贴两个,一个与地图和一个与减少。

代码语言:javascript
复制
var array = [1, 3, 7, 9, 3, 1, 6, 3, 3, 2, 11, 2];

// MAP -----------------------------------------|

function countDuplicatesMap(num){
  this[num] = (++this[num] || 1);
  return this;
}
   
console.log(array.map(countDuplicatesMap, {}).pop());

// REDUCE -----------------------------------------|

function countDuplicatesReduce(obj, num){
  obj[num] = (++obj[num] || 1);
  return obj;
}
   
console.log(array.reduce(countDuplicatesReduce, {}));

在比较了地图和约简的两种方法之后,我会按照约瑟夫的梦想者的观点去做“约减”。使用MAP,我们得到一个数组返回,该数组有指向集合对象的指针,但是对于原始数组的每个元素,因此得到了POP(),而对于simple,我们只剩下一个简单的对象。

注意:我使用“前缀增量运算符”稍微减少了三元数。

票数 0
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/160988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档