如何访问 javascript 对象的多个属性
How to access multiple properties of a javascript object?
如果我有数组:
my_array = [{a:3,b:4,c:7},{a:5,b:8,c:6}]
property_names = ["a","c"]
如何使用 property_names 数组对my_array获得以下输出?
subset_array = [[3,7],[5,6]]
var my_array = [{a:3,b:4,c:7}, {a:5,b:8,c:6}];
var keys = ['a', 'c'];
my_array.map(function(d){
return keys.map(function(k) {
return d[k];
});
});
这会给你带来[[3, 7], [5, 6]]
,似乎正是你想要的。
[过时的初始答案;在OP更新他的问题之前]
使用o.a
和o.c
- 不涉及魔法,没有小猫受到伤害!
您也可以使用[]
语法:o['a']
和 o['c']
- 但通常只有在要访问动态属性名称(即变量而不是[]
内的引号字符串)时才使用它
如果你想要一个同时具有这两个值的数组:
var a_and_c = [o.a, o.c];
现在,您可以使用a_and_c[0]
和[1]
来访问这两个值。
您可以通过两种表示法访问属性:
要么o.a
和o.c
,要么o['a']
和o['c']
.
编辑
如果你想创建一个包含这两个值的新数组,那么只需使用,例如,@Reid建议的代码:
[o.a, o.c]
第二次编辑
因此,只需在 map
函数中构建数组,如下所示:
var filter = [ "a","c","f","zzz"];//应该
subset_array = my_array.map( function(v){ var newArr = [];
for( var i=0; i<filter.length; ++i ) {
if ( typeof v[ filter[i] ] !== 'undefined' ) {
newArr.push( v[ filter[i] ] );
}
}
return newArr;
} );
但是,需要注意的一点是,只要您使用基元类型(如示例中的 int 值),上面的代码就会克隆属性。这意味着,如果您在某个时候更改了 my_array
中的值,subset_array
将不会隐式更改,但您也必须重新创建subset_array
或在那里调整值。
这不是一个完整的答案,但我相信它会有用:
var values = []
var obj = {a: 1, b: 2, c: 3}
for (var prop in obj) {
if (obj.hasOwnValue(prop)) { // skip props in [[prototype]], no effect here
values.push(obj[prop])
}
}
values // -> [2, 1, 3] (in SOME UNDEFINED ORDER)
要点:
- 迭代对象的 [所有] 对象属性名称(但不是 [[原型]] 链)
- 从属性名称动态访问值
- 属性不排序;例如,如果需要,可以
values
排序
例如,这可以扩展以添加不同的"排除"规则。它还可以适应不同的高阶函数。
快乐编码。
相关文章:
- 如何从对象的原型方法访问JavaScript对象属性
- 如何将数组项添加到对象属性中
- 设置嵌套对象属性的更好方法
- JavaScript管理具有重复属性名称的对象属性
- 如何使用element.myobj.prop等具有对象属性的元素
- 如何使用(this)访问Angular 2 http rxjs catch函数中的对象属性
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 如何在AngularJS工厂中正确声明对象属性
- 如何使用object.assign()从其他对象引用基本对象属性
- 使用XPath样式访问Javascript JSON对象属性
- 将javascript对象(属性+值)合并到一个对象中
- 数组:使对象属性成为数组键
- 无法从JavaScript中的函数调用对象属性
- Google Closure Advanced |无法识别对象属性|动态属性
- Javascript从匿名函数访问外部对象属性
- 从函数更改对象属性
- 如何从字符串变量访问对象属性
- 从嵌套对象属性中获取排除某个值的最高值
- 在Aurelia computeds中,当设置依赖关系时,如何声明对对象属性的依赖关系
- 传递数量不确定的可能嵌套的对象属性