我正在尝试使用动态名称访问对象的属性.这可能吗?
const something = { bar: "Foobar!" };
const foo = 'bar';
something.foo; // The idea is to access something.bar, getting "Foobar!"
Run Code Online (Sandbox Code Playgroud) 除了显而易见的事实,即第一种形式可以使用变量而不仅仅是字符串文字,是否有任何理由使用其中一种,如果是这样,在哪种情况下呢?
在代码中:
// Given:
var foo = {'bar': 'baz'};
// Then
var x = foo['bar'];
// vs.
var x = foo.bar;
Run Code Online (Sandbox Code Playgroud)
上下文:我编写了一个生成这些表达式的代码生成器,我想知道哪个更好.
为什么以下工作?
<something>.stop().animate(
{ 'top' : 10 }, 10
);
Run Code Online (Sandbox Code Playgroud)
虽然这不起作用:
var thetop = 'top';
<something>.stop().animate(
{ thetop : 10 }, 10
);
Run Code Online (Sandbox Code Playgroud)
为了使它更清晰:目前我无法将CSS属性作为变量传递给animate函数.
我想为'myObj'添加一个新属性,将其命名为'string1'并赋予它'string2'的值,但是当我这样做时它会返回'undefined:
var myObj = new Object;
var a = 'string1';
var b = 'string2';
myObj.a = b;
alert(myObj.string1); //Returns 'undefined'
alert(myObj.a); //Returns 'string2'
Run Code Online (Sandbox Code Playgroud)
换句话说:如何创建一个对象属性并为其赋予存储在变量中的名称,而不是变量本身的名称?
我正在尝试这样的事情,但这个例子不起作用.
jsObj = {};
for (var i = 1; i <= 10; i++) {
jsObj{'key' + i} = 'example ' + 1;
}
Run Code Online (Sandbox Code Playgroud)
如何制作这样的动态密钥呢?
我有一个对象,可以是任意数量的级别,可以有任何现有的属性.例如:
var obj = {
db: {
mongodb: {
host: 'localhost'
}
}
};
Run Code Online (Sandbox Code Playgroud)
在那我想设置(或覆盖)属性,如下所示:
set('db.mongodb.user', 'root');
// or:
set('foo.bar', 'baz');
Run Code Online (Sandbox Code Playgroud)
属性字符串可以有任何深度,值可以是任何类型/东西.
如果属性键已存在,则不需要合并作为值的对象和数组.
上一个示例将生成以下对象:
var obj = {
db: {
mongodb: {
host: 'localhost',
user: 'root'
}
},
foo: {
bar: baz
}
};
Run Code Online (Sandbox Code Playgroud)
我怎么才能实现这样的功能呢?
可能重复:
如何使用变量作为名称向Javascript对象添加属性?
在JavaScript文字中使用变量作为属性名称?
是否可以在JavaScript中添加变量作为对象的属性名称,如下所示:
var myVar = "name";
var myObject = {
{myVar}: "value"
};
Run Code Online (Sandbox Code Playgroud) 我正在创建自己的对象:
gridObject = new Object();
Run Code Online (Sandbox Code Playgroud)
然后我使用jquery来拉取列表项标签的内容,这些标签本身就是用来填充的
具有特定类名的标签:
<li row="1"><p class="department" rowitem="department">Photography</p>...</li>
Run Code Online (Sandbox Code Playgroud)
我正在使用此代码拉他们:
//make object from results
gridObject = new Object();
//get all the rows
var rowlist = $('li[row]');
for(var r=0; r<rowlist.length; r++) {
//make gridObject row element here
//get the row content
var thisrow = $(rowlist[r]).html();
//get all the p tags
var rowitems = $(thisrow + 'p.[rowitem]');
//get field name
for(var ri=0; ri<rowitems.length; ri++) {
if (r < 2) { //this is temporary just for testing
var fieldname = $(rowitems[ri]).attr('rowitem'); …Run Code Online (Sandbox Code Playgroud) 有没有办法在node-mongodb-native驱动程序中使用动态密钥?我的意思是让变量保持键而不是直接使用键.
正如通常会这样做的时候:
db.createCollection('col', function(err, col){
col.insert({'_id':'wak3ajakar00'});
}
Run Code Online (Sandbox Code Playgroud)
改为:
db.createCollection('col', function(err, col){
var ID = '_id';
col.insert({ID:'wak3ajakar00'});
}
Run Code Online (Sandbox Code Playgroud)
当我运行后面的代码时,我最终会在集合db.col中找到一个文档ID,除了标准创建之外还调用了一个键_id,而不是只有一个_id带有值的键wak3ajakar00.这让我相信实际上不可能直接这样做.
相反,我现在只是创建我想提前插入的文档,如下所示:
db.createCollection('col', function(err, col){
var ID = 'wak3ajakar00';
var key = '_id';
insertion = {}
insertion[key] = ID;
col.insert(insertion);
}
Run Code Online (Sandbox Code Playgroud)
这与我想要的完全一样,但我只是想知道是否有更好的方法来解决这个问题.JavaScript,NodeJS和MongoDB对我来说都是新手,所以我觉得我很容易丢失一些东西.如果没有,有没有更简洁的方法在JavaScript中编写上述代码?
最好的,谢谢,
萨米
假设我有一个像这样的JSON对象:
var myObj = {
'question1': {
'option1': 'foo',
'option2': 'bar',
'option3': 'baz'
},
'question2': {
...
},
'question3': {
...
}
};
Run Code Online (Sandbox Code Playgroud)
由于它的子节点中的键总是有一个数字,我想做一个循环并将循环的索引连接到对象键,并用点表示法获取值...
所以,我想要得到这些值,我需要做一些像这样的事情:
myObj.'question'+i
Run Code Online (Sandbox Code Playgroud)
我怎么能连接正确?
javascript ×10
object ×4
properties ×4
jquery ×2
ecmascript-5 ×1
loops ×1
mongodb ×1
node.js ×1
syntax ×1
variables ×1