javascript - 在 javascript 中访问和创建属性
问题描述
因为我们可以创建一个具有一些属性的对象,如下所示:
let obj = {};
obj.pp1 = "abc";
obj.pp2 = 1;
现在该对象将具有属性 pp1 和 pp2。
现在我在reduce()
函数内部使用相同的模式来总结篮子内容如下:
方法一:
const fruitBasket = ['banana', 'cherry', 'orange', 'apple', 'cherry', 'orange', 'apple', 'banana', 'cherry', 'orange', 'fig' ];
const aggregatedBasket = fruitBasket.reduce(
(ag , item) => {
if (ag.hasOwnProperty(item) == false){
ag.item. = 1;
} else {
ag.item += 1;
}
return ag;
}, {});
console.log(aggregatedBasket);
但是当我运行代码时,它返回的输出为:
{项目:1}
我知道这是错误的,因为输出不正确,现在我尝试了以下模式
方法二:
const aggregatedBasket = fruitBasket.reduce(
(ag , item) => {
if (ag.hasOwnProperty(item) == false){
ag[item] = 1;
} else {
ag[item] += 1;
}
return ag;
}, {});
console.log(aggregatedBasket);
现在它正在打印正确的输出,但我无法理解为什么操作员在方法 1.
中失败了。
注意:我是JavaScript初学者,请帮助我理解。对于那里的许多专家来说,这可能看起来很简单。
解决方案
@Pointy 的评论作为答案
ag.item
意思是ag['item']
,不是ag[item]
。(除非item='item'
:)
推荐阅读
- ios - 具有随时间变化的时间目标的进度条
- python - 为什么 NumPy int 不是 Python int 的实例,但 NumPy float 是 Python float 的实例?
- java - 意图服务使我的应用程序崩溃?
- dotnetbrowser - 为什么滚动事件不起作用?
- java - JAXB / Java 1.6 / 不可打印字符
- emacs - 通过 cl-function 传递回调
- azure-active-directory - 由于缺少版本号,Azure AD Web 应用的 AppSource 验证失败
- mysql - 插入包含字段“from”和“to”的 Mysql 表时出错
- android - 不可见的进度条未通过代码显示
- c++ - 制作 std::vector 容量>=N 和大小=0 的最佳方法?