gpt4 book ai didi

javascript - 用reduce() 计数——值从哪里来?

转载 作者:行者123 更新时间:2023-12-01 02:31:32 28 4
gpt4 key购买 nike

在学习过滤掉数组中仅出现一次的值时,我遇到了一段非常有用的代码,我根据自己的需要对其进行了调整。我开始分析如何执行一个值的重复计数。下面我有一个进行计数的函数。

function countInstancesOfAppearance(word) {
var letters = word.split('');

return countLetters = letters.reduce(function(object, key) {
object[key] = object[key] ? object[key] + 1 : 1;
return object;
}, {});
}

结果是:{l: 1, a: 1, s: 2, o: 1}

但是,我无法理解 object[key] + 1 : 1 背后发生了什么。对我来说更清楚的是用以下方式编写函数:

function countInstancesOfAppearance(word) {
var letters = word.split('');

return countLetters = letters.reduce(function(object, key) {
if (object[key] = object[key]) {
object[key] = object[key] + 1;
} else {
object[key] = 1;
}

return object;
}, {});
}

为了更好地描述我的推理:

var obj = {};
obj.cat = ""; // obj = {cat: ""};
obj.cat + 1 // in console, it gives 1, but the object continues to be obj = {cat: ""};
obj.cat = 1 // only now we have obj = {cat: 1};
obj.cat + 1 // the object continues to be obj = {cat: 1};
obj.cat = obj.cat + 1 //only now we have obj = {cat: 2};

那么您能否向我解释一下,reduce() 方法是如何利用以下条件 中的 obj.cat + 1 或仅使用 1 的?对象[键] = 对象[键] ? object[key] + 1 : 1; 进行正确的分配?

这是带有console.logs的代码:

function countInstancesOfAppearance(word) {
var letters = word.split('');

return countLetters = letters.reduce(function(object, key) {
console.log("object", object);
console.log("key", key);
console.log("object[key] = object[key]", object[key] = object[key]);
object[key] = object[key] ? object[key] + 1 : 1;
return object;
}, {});
}

它的输出:

enter image description here

最佳答案

条件运算符有 higher precedence比赋值运算符,所以

object[key] = object[key] ? object[key] + 1 : 1;

相当于

object[key] = (object[key] ? object[key] + 1 : 1);

object[key]设置为1如果是undefined0 (因为这些值是假的),并且在大多数其他情况下递增。

关于javascript - 用reduce() 计数——值从哪里来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48279071/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com