据我所知,可以将更多数据推送到数组中。 Fe,我有一个阵列:
G = [12, 34, 5].
现在,我可以像这样访问第n个元素:
G[n]
我现在想用标签推送新数据,所以我希望数组看起来像
G = [12, 34, 5, label:567856, other: Infinity]
我可以通过致电
获得567856G["label"] //(or Infinity by calling G["other"]). How can I achieve this?
我找到了
G[i].push({
label:567856,
other: Infinity
})
但是这样它将它添加为一个完整的新元素,我只能调用G [4] [“other”],而不是G [“other”]。如何按照我的描述添加元素?
谢谢!
答案 0 :(得分:2)
要添加到Andriy的答案,您需要使用Javascript对象而不是数组。对象可以具有带自定义名称的索引。例如,给定
<input type="number" id="height" value="5">
你可以做到
var newObj = {"hello": "world", "value":1, "inf": Infinity}
的问题
newObj['hello'] // "world"
newObj['value'] // 1
是你要推送一个具有2个属性的对象,而不是推送2个对象,这就是你需要使用G[i].push({
label:567856,
other: Infinity
})
请参阅正在运行JSFiddle example.
答案 1 :(得分:1)
G["other"] = "something";
使用此功能,您将保留原始数组,现在具有属性other
,但它不在[12, 34, 5]
使用此方法,您可以将对象添加到数组中:
G.push({other: 123})
console.log(G);//[12, 34, 5, object]
console.log(G[3].other);//123
的问题
G[i].push({
label:567856,
other: Infinity
})
是你推动一个具有2个属性的对象,而不是推送2个对象,这就是为什么你需要使用G [4] [&#34;其他&#34;]
答案 2 :(得分:0)
阵列的设计并不适合您的情况。
访问流的数组元素数组对象对某类属性进行特殊处理 名。属性名称P(以String值的形式)是一个数组 index当且仅当ToString(ToUint32(P))等于P和 ToUint32(P)不等于2 ^ 32-1。
因此您无法按字母顺序访问Array元素,因为该键不会被 ToUint32 解析为整数。
您可以将object添加到数组并在推入数组后存储它的索引(Array.prototype.push会返回您的数组大小):
var G = [1,3,4];
var labelIndex = G.push({'label': 123}) - 1;
console.log(G[labelIndex]["label"]);
实际上,当你的数组中有两个或多个具有相同属性的对象时,该解决方案就会出现问题。
以下建议不推荐!
但是,您可以使用下面的代码来定义G
数组属性,但它不是数组属性的值,它是数组属性:
G.other = Infinity;
G.label = 567856;
// Access newly created properties
console.log(G["other"]);
console.log(G["label"]);
祝你好运!
答案 3 :(得分:0)
JavaScript中的数组是一种对象。因此,它们可以包含属性:
G.label = 567856;
G.other = Infinity;
数组优于其他对象的优点是它们的索引元素是有序的。
如果您希望数组中的第四个和第五个元素为567856
和Infinity
和,那么您希望能够使用{{来引用这些值1}}和G.label
,您可以按照以下方式执行此操作:
G.other
您仍然可以使用循环遍历数组:
var G = [12, 34, 5];
G.push(G.label = 567856); //same as G.label = 567856; G.push(G.label);
G.push(G.other = Infinity);
请注意,此会创建重复项。如果您之后更改了var G = [12, 34, 5];
G.push(G.label = 567856);
G.push(G.other = Infinity);
G.forEach(function(val) {
console.log(val); // 12 ... 34 ... 5 ... 567856 ... Infinity
});
console.log(G.label); //567856
console.log(G.other); //Infinity
或G.label
,那么这些更改将不反映在数组的第四和第五个元素中。
但是,您可以使用Object.defineProperty()在G.other
和G.label
上创建setter来克服这个问题:
G.other