我有一个数组,其中有对象。我需要使用它并需要访问对象数据。
以下是此数组的示例:
var result <-
(16)array […]
0:object {…}"myobjectname1": {…} style_name: "border-top-right-radius"
style_unit: "px"
style_value: "0"
1:object {…}"myobjectname2": {…} style_name: "border-bottom-right-radius"
style_unit: "px"
style_value: "0"
2:object { "myobjectname3": {…} }
3:object { "myobjectname4": {…} }
4:object { "myobjectname5": {…} }
...
我想通过对象名直接访问不同的对象
示例alert("result.myobjectname1.style_name");
这似乎行不通,因为在这种情况下[0],我无法通过索引访问数组!?
我不知道这个索引,每次可能都不同。
有没有一种方法可以通过对象名直接访问对象,或者必须以一种方式创建可以工作的数组/对象?
在php中,我将使用一个简单的数组来完成此操作,在JavaScript中,这是不可能的,因为我的索引是字母数字。
更新
这是我在每个循环中创建数据的方式
var match=new Array();
each(...)
{
...
var r = null;
r={ [myobjectname_from_variable] : { 'style_name': res_stylename,
'style_value': res_stylevalue,
'style_unit' : elem_styleunit} };
match.push(r);
...
}
重要提示:myobjectname_from_variable的值与res_stylename相同,并且包含“ border-top-right-radius”之类的内容
在这里,我们必须考虑如何在javascript中调用它。例如
object.border-top-right-radius.style_value
不会breack并返回未定义的“正确”错误...
答案 0 :(得分:2)
您可以使用数组的所有对象来构建对象。然后以所需对象的密钥进行访问。
.as-console-wrapper {
max-height: 100% !important;
}
string[] rest = new string[] { null, null, tableName, null };
DataTable rows = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, rest);
foreach (DataRow rr in rows.Rows)
{
string tbrow = rr["COLUMN_NAME"].ToString();
int colnum_type = Int32.Parse(rr["DATA_TYPE"].ToString());
string datatype = get_dataType(colnum_type)
}
要通过键更快地访问,可以使用已定义的对象(例如
)来构建对象var array = [
{ foo: { id: 1, name: 'foo' } },
{ bar: { id: 2, name: 'bar' } },
{ baz: { id: 3, name: 'baz' } }
],
object = Object.assign(...array);
console.log(object.foo.id);
console.log(object);
在循环中,您可以像这样用property accessor
分配值对象.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
您最好的选择是迭代数组,然后调用每次迭代的索引。还有一个名为.forEach
的数组方法,可以为您解决这个问题。
var yourArray = []; // contains the array of objects you mentioned
yourArray.forEach(object => {
const key = Object.keys(object)[0];
alert(object[key].style_name);
})
更新
您的主要问题是密钥中使用连字符。如果要为这样的对象建立索引,则需要将键作为字符串引用。
const obj = {'border-top-right-radius':'style_value'};
const test = obj['border-top-right-radius'];
console.log(test); // this logs 'style_value '
const other = obj.border-top-right-radius;
// This will throw that 'right' is undefined.
如果要使用该格式,则将连字符更改为下划线。有了下划线,就可以根据需要直接引用它们。您稍后可以轻松地将.replace
const underscoreReplacement = 'border_top_right_radius';
const actualSheetValue = underscoreReplacementreplace(/_/g, '-');
console.log(actualSheetValue); // logs 'border-top-right-radius'