有没有办法在JavaScript中批量设置关联数组键和值,类似于下面的PHP的简写数组声明?
$array = [
'foo' => 'val1',
'bar' => 'val2',
'baz' => 'val3'
];
我能想到在JS中声明关联数组的唯一方法就是这样:
var newArray = new Array();
newArray['foo'] = 'val1';
newArray['bar'] = 'val2';
newArray['baz'] = 'val3';
或类似的东西:
var newArray = new Array(),
keys = ['foo', 'bar', 'baz'],
vals = ['val1', 'val2', 'val3'];
for(var i = 0; i < keys.length; i++) {
newArray[ keys[i] ] = vals[i];
}
在某些情况下,最后一个可能会导致混乱,但我想列出它,因为它是可行的。
如果没有这样的方式,那就没关系了。这会很好。我尝试使用jQuery这样的JS对象文字:
var myObject = {
foo: $('foo'),
bar: $(this.foo).find('bar'),
baz: $(this.bar).data('baz')
}
不幸的是,似乎JS对象文字不允许评估代码来设置其属性的值。如果我将这些属性转换为返回值而不是永久存储属性中的值/引用的方法,那么它们必须在每次调用时运行;如果可能,我真的不想这样做。
提前致谢。
答案 0 :(得分:0)
如果您只是尝试使用一堆属性/值对来声明Javascript对象,则可以这样做:
var myData = {
foo: 'val1',
bar: 'val2',
baz: 'val3'
};
然后您可以访问:
console.log(myData.foo); // `val1`
console.log(myData.bar); // `val2`
console.log(myData.baz); // `val3`
注意,Javascript没有名为&#34;关联数组&#34;的数据类型。大多数Javascript开发人员使用具有属性名称的对象来解决类似问题,但Javascript对象不维护一组有序的属性 - 它们是无序的。
你不能这样做:
var myObject = {
foo: $('foo'),
bar: $(this.foo).find('bar'),
baz: $(this.bar).data('baz')
}
因为this
没有从声明中指向对象本身。 Javascript只是没有那样工作。您必须稍后添加这些属性或将它们转换为函数或使用不同的结构。您还必须确保在静态声明时DOM已完全就绪。
可能有意义的是:
var myObject = {
init: function() {
this.foo = $('foo');
this.bar = this.foo.find('bar');
this.baz = this.foo.find('baz');
}
}
// then, sometime when you know the DOM is ready
myObject.init();
或者,如果你想在DOM准备就绪时只在一个函数调用中执行它,你可以跳过静态声明,只需创建一个你知道DOM准备好后声明并执行的函数:
var myObject = (function() {
var obj = {};
obj.foo = $('foo');
obj.bar = obj.foo.find('bar');
obj.baz = obj.foo.find('baz');
return obj;
})();