给对象属性一个数组值
Giving an object property an array value?
我有以下代码,我想让牌组阵列充满52张不同的牌。每当我运行代码并提醒卡对象时,它就会显示为"[对象对象]"。
有人能向我解释一下为什么会这样做,以及这个问题的解决方案吗?
var suits = ["Clubs", "Diamonds", "Hearts", "Spades"];
var ranks = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"];
var deck = [];
for (var i = 0; i < suits.length; i++) {
for (var j = 0; j < ranks.length; j++) {
var card = {rank: ranks[j], suit: suits[i]};
deck.push(card);
alert(card)
}
}
为什么这样做
这完全正常。当您执行alert()
时,您创建的卡对象不知道如何表示自己,原因很简单,因为没有toString()
方法实现。
问题解决方案
尝试为每个卡对象指定一个匿名toString()
函数实现,如下所示:
var suits = ["Clubs", "Diamonds", "Hearts", "Spades"];
var ranks = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"];
var deck = [];
for (var i = 0; i < suits.length; i++) {
for (var j = 0; j < ranks.length; j++) {
var card = {
rank: ranks[j],
suit: suits[i],
toString : function() { return this.rank + ' ' + this.suit; }
};
deck.push(card);
//alert(card); // console.log doesn't block code execution
console.log(card.toString());
}
}
注意
您应该考虑使用console.log()
而不是alert()
,因为它不那么烦人,而且更容易在控制台中调试(点击F12)。但是要小心运行IE9或更低版本的生产代码,因为当开发者控制台没有打开时,他们的javascript引擎会崩溃。
发生这种情况是因为您指定了要提醒的整个对象,而提醒不知道哪些属性是相关的。如果你想要一个对象的可扩展视图,你可以使用console.log(card)
,这将把你的对象作为树视图输出到浏览器开发者控制台。
对象就是这样显示的,它的toString
方法就是这样输出的,要查看它的内容,请使用
alert(JSON.stringify(card));
您应该将警报更改为:
alert(JSON.stringify(card))
FIDDLE演示
用此-->警报(JSON.stringfy(卡))替换您的警报
var suits = ["Clubs", "Diamonds", "Hearts", "Spades"];
var ranks = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"];
var deck = [];
for (var i = 0; i < suits.length; i++) {
for (var j = 0; j < ranks.length; j++) {
var card = {rank: ranks[j], suit: suits[i]};
deck.push(card);
alert(JSON.stringify(card))//CHANGE THIS...
console.log(JSON.stringify(card))
}
}
解释
stringify将JavaScript数据结构转换为JSON文本。Json文本只不过是文本的键:值对。它再简单不过了。
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 根据id将json数组组合为一个json数组
- JavaScript数组包含一个值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- jQuery$.inArray()总是返回-1和一个对象数组
- 在数组中的一个元素上设置多个值
- javascript处理一个对象数组以获得一个新的对象数组
- 作为一个二维数组,从ajax接收
- 你能用来自数组的属性名称生成一个对象吗
- 多维关联数组的最后一个索引
- 如何创建一个方法来验证数组的范围
- 循环以检查数组中的最后一个图像
- 在Javascript中将一个值和字符串数组转换为if语句
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 如何将一个对象添加到每个对象数组中
- 如何创建一个谷歌地图地理坐标数组
- 如何从另一个带下划线的数组中筛选带元素的数组
- 如何在PHP数组中加载下一个youtube
- 查找对象数组是否包含其中一个标记的最快方法
- 如何使用Javascript和Ajax传递一个HTML选择标签到PHP $_POST与一个(数组)var当名称属性是一个