当前位置: 首页 > 知识库问答 >
问题:

使用ES6在没有映射的情况下递增对象属性

樊胜
2023-03-14

所以,我想做的是:

创建水果的对象作为键和它们出现的次数。结束对象如下所示:

fruitsObj[fruit].name
fruitsObj[fruit].count

所以对于“苹果”来说:

fruitsObj.apple.name // apple
fruitsObj.apple.count // 4
{apple: {…}, pear: {…}, banana: {…}, orange: {…}, kumquat: {…}}
apple:{name: "apple", count: NaN}
banana:{name: "banana", count: NaN}
kumquat:{name: "kumquat", count: NaN}
orange:{name: "orange", count: NaN}
pear:{name: "pear", count: NaN}
__proto__: Object
{apple: {…}, pear: {…}, banana: {…}, orange: {…}, kumquat: {…}}
apple:{name: "apple", count: 1}
banana:{name: "banana", count: 1}
kumquat:{name: "kumquat", count: 1}
orange:{name: "orange", count: 1}
pear:{name: "pear", count: 1}
__proto__: Object
// Declare an array of fruits
var fruitsArr = ['apple', 'pear', 'apple', 'banana', 'orange', 'kumquat', 'orange', 'apple', 'apple', 'orange'];

var fruitsObj = {};

// Loop through each fruit storing name and count.
fruitsArr.forEach(function(fruit, i) {
	
	// Create each named-fruit property in object as a sub-object.
	fruitsObj[fruit] = {};
	
	fruitsObj[fruit].name = fruit;
	
	// FAILS with NaN!
	fruitsObj[fruit].count = ++fruitsObj[fruit].count;
	
});

console.log(fruitsObj);
// Declare an array of fruits
var fruitsArr = ['apple', 'pear', 'apple', 'banana', 'orange', 'kumquat', 'orange', 'apple', 'apple', 'orange'];

var fruitsObj = {};

// Loop through each fruit storing name and count.
fruitsArr.forEach(function(fruit, i) {
	
	// Create each named-fruit property in object as a sub-object.
	fruitsObj[fruit] = {};
	
	fruitsObj[fruit].name = fruit;

	// if fruit count exists and is greater than zero
	if (fruitsObj[fruit].count != undefined && fruitsObj[fruit].count > 0) {
		// increment it
		fruitsObj[fruit].count++;
	} else {
		// set it to one
		fruitsObj[fruit].count = 1;
	}	
	
});

console.log(fruitsObj);

我回顾了一堆帖子和链接,这些帖子和链接让我陷入了一个兔子洞。即便如此,他们中没有一个明确地解决了我所能说出的问题。

  • 这段代码中Number对象保存属性并增加数字时发生了什么?
  • 如何增加JavaScript对象中的值?
  • 如何在JavaScript中使用for…语法获得循环计数器/索引
  • 遍历对象数组并在每个对象中更改一个属性
  • https://javascript.info/object
  • http://www.mojavelinux.com/articles/javascript_hashes.html
  • https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/map
  1. 为什么我的计数器不递增,而是返回'nan'?
  2. 有什么特殊方法可以在赋值之前将对象属性声明为数字吗?
  3. 我在理解上缺少什么来使这个工作?如何增加对象计数属性?

共有1个答案

岑鸣
2023-03-14

为什么我的计数器不递增,而是返回'nan'?

因为在第一种情况下,您试图递增未定义的属性。排队

fruitsObj[fruit].count = ++fruitsObj[fruit].count;

fruitsobj[fruite].count未定义,因为您从未为其分配任何数字值。您在第二个代码块中更正了此问题。

// Create each named-fruit property in object as a sub-object.
    fruitsObj[fruit] = {};
// Declare an array of fruits
    var fruitsArr = ['apple', 'pear', 'apple', 'banana', 'orange', 'kumquat', 'orange', 'apple', 'apple', 'orange'];
    
    var fruitsObj = {};
    
    // Loop through each fruit storing name and count.
    fruitsArr.forEach(function(fruit, i) {
    	
    	// Create a fruit object only if it does not exist already.
        if (!fruitsObj[fruit]) {
    	   fruitsObj[fruit] = {};
        }
    	
    	fruitsObj[fruit].name = fruit;
    
    	// if fruit count exists and is greater than zero
    	if (fruitsObj[fruit].count != undefined && fruitsObj[fruit].count > 0) 
        {
    		// increment it
    		fruitsObj[fruit].count++;
    	} else {
    		// set it to one
    		fruitsObj[fruit].count = 1;
    	}	
    	
    });
    
    console.log(fruitsObj);
 类似资料:
  • 通常对象映射器用于将较大的数据集映射到较小的数据集的场景(例如:对象有很多数据,但我们只想返回其中的几个)。 对象映射器通常创建一个小集合的目标对象的新实例,并从具有较大集合的源对象中设置所需字段,但我有相反的场景:我有一个已经包含一些数据的目标对象,现在我需要将具有较小数据集的新源对象映射到目标对象。 源类 目的地类别 DesObj已经包含int i和float f的值,SrcObj有Strin

  • TL;DR:将@webservlet(“/find-customers”)放在servlet(通过Tomcat 7部署)的开头并不是将servlet映射到host:port/webproject/find-customers中,即使servlet位于src文件夹中。

  • 我看到的所有解决方案都需要使用。但是,我想在Eclipse之外的单个文件上使用CDT解析器。那有什么办法吗?

  • 问题内容: 我可以在没有jQuery的情况下访问数据属性吗? 使用jQuery很容易,但是如果没有jQuery,我在任何地方都看不到该怎么做。 如果我在Google上搜索“没有jQuery”,那么我得到的只是jQuery示例。 可能吗 问题答案: 在这里,我找到了这个例子: 因此,它看起来非常可行。

  • 问题内容: 我有一个模型,当从前端发送请求时,我可以在控制器中使用@Valid进行验证: 但是现在,我还使用不含控制器的Jackson的ObjectMapper创建了一个对象。有没有一种方法可以在ObjectMapper中注册此验证,还是应该只检查setter中的变量? 问题答案: 反序列化后,您可以扩展和验证对象。要注册此bean使用。 具有验证的简单bean反序列化器: 我们可以如下使用它:

  • 我正在使用实体框架映射一些表,但除非我声明一些列作为主键,否则我无法这样做。 这里的问题是,数据库中的表没有主键,并且有数百万行。我没有创建新Id列的权限。 Obs:如果我将属性添加到诸如