如何获取位于另一个对象内部的对象的名称
How to get the name of an object that is inside another object?
我正在做一个打开自定义对话框的项目。我正试图使其在settings
对象中,您可以将自定义按钮的名称指定为对象的名称,其中包含按钮的信息。我想知道,我是如何得到按钮名称的?
我目前的代码是:
function resetTools() {
Dialogue.open({
message: "Are you sure you want to reset all chat rooms?",
buttons: {
yes: {
styleSheetClass: "dangerbtn",
onclick: function() {
// Do stuff here
}
},
no: {
onclick: function() {
// Do other stuff here
}
}
}
})
}
var Dialogue = {
open: function(settings) {
var message = settings.message;
var buttons = message.buttons;
for (var i = 0; i < buttons.length; i++) {
var cls = buttons[i].styleSheetClass.length ? buttons[i].styleSheetClass + " dialogueButton" : "dialogueButton";
$(".dialogue .buttons").append('<div class="' + cls + '">' + +'</div>');
}
}
}
谢谢你的帮助。
您可以使用for...in
循环来获取对象的密钥,并记住使用hasOwnProperty
来测试属性是否存在
for (var key in buttons) {
if (buttons.hasOwnProperty(key)) {
// key could be 'yes' or 'no'
// access the value using buttons[key]
}
}
或者您可以使用es5.1 中引入的Object.keys
Object.keys(buttons).forEach(function(key) {
// do something with buttons[key]
})
有两个错误。。。
首先是
var buttons = message.buttons
;
这将使buttons
成为undefined
。
应该是
var buttons = settings.buttons;
接下来,由于buttons
是一个对象,因此需要一个for..in
循环来提取密钥名称。。
因此,在一天结束时,您的代码应该看起来像
var Dialogue = {
open: function(settings) {
var message = settings.message;
var buttons = settings.buttons; // <<<< NOTE: It's settings.buttons.
for (var button in buttons) {
console.log(button); // This will give you yes in 1st iteration and no in 2nd.
var cls = buttons[button].styleSheetClass.length ? buttons[button].styleSheetClass + " dialogueButton" : "dialogueButton";
$(".dialogue .buttons").append('<div class="' + cls + '">' + +'</div>');
}
}
}
Object.keys(buttons).forEach(function (name) {
var button = buttons[name];
// now you have both
});
您在第24行(本片段中的25行)遇到了一个问题。您正在使用buttons
,就好像它是一个数组一样。
function resetTools() {
Dialogue.open({
message: "Are you sure you want to reset all chat rooms?",
buttons: {
yes: {
styleSheetClass: "dangerbtn",
onclick: function() {
// Do stuff here
}
},
no: {
onclick: function() {
// Do other stuff here
}
}
}
})
}
var Dialogue = {
open: function(settings) {
var message = settings.message;
var buttons = settings.buttons;
// vvv buttons isn't an array, it's an object
for (var i = 0; i < buttons.length; i++) {
var cls = buttons[i].styleSheetClass.length ? buttons[i].styleSheetClass + " dialogueButton" : "dialogueButton";
$(".dialogue .buttons").append('<div class="' + cls + '">' + +'</div>');
}
}
}
这里有一个修复:
function resetTools() {
Dialogue.open({
message: "Are you sure you want to reset all chat rooms?",
buttons: [
{
name: 'Yes',
styleSheetClass: "dangerbtn",
onclick: function() {
// Do stuff here
}
}, {
name: 'No',
onclick: function() {
// Do stuff here
}
},
]
})
}
var Dialogue = {
open: function(settings) {
var message = settings.message;
var buttons = message.buttons;
for (var i = 0; i < buttons.length; i++) {
var cls = buttons[i].styleSheetClass != undefined ? buttons[i].styleSheetClass + " dialogueButton" : "dialogueButton";
$(".dialogue .buttons").append('<div class="' + cls + '">' + buttons[i].name +'</div>');
}
}
}
我调整了打开对话框的对象,使其具有作为数组的按钮,并将名称作为数组中每个对象的属性。
尝试在settings.button.yes
上使用Object.keys()
var Dialogue = {
open: function(settings) {
var message = settings.message;
var buttons = setting.buttons.yes;
Object.keys(buttons).forEach(function(button) {
if (button === "styleSheetClass") {
var cls = buttons[button].length
? buttons[button] + " dialogueButton"
: "dialogueButton";
$(".dialogue .buttons")
.append('<div class="' + cls + '">' + +'</div>');
}
})
}
}
您可以使用jQuery并这样做:
$.each(buttons, function(button_name, button) {
// code ...
});
或者不带jQuery:
var keys = Object.keys(buttons);
for(var i = 0; i < keys.length; i++) {
var button_name = keys[i];
var button = buttons[button_name];
// code ...
}
Object.keys为您提供该对象中元素的名称。
您可以使用console.log(Object.keys(buttons))
预览它。
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- 如何确定对象内部包含对象的JSON的长度
- 为什么这个内部对象文字等于另一个对象
- JavaScript - 尝试从另一个对象内部访问一个对象方法,得到未定义的错误
- 在IE8中初始化另一个对象内部的对象失败
- 使用Undercore在另一个对象内部修改对象内部的数组
- 如何获取位于另一个对象内部的对象的名称
- 使用一个对象数组作为主干模型内部的属性
- 余烬数据-在一个对象内部分配一个值
- 如何在JavaScript中找到具有另一个对象内部属性的对象
- 在foreach内部创建一个对象
- 一个对象在另一个对象内部的初始化