Javascript - 向现有数组添加新标签和数据
Javascript - Adding new label and data to existing array
据我所知,可以将更多数据推送到数组中。Fe,我有一个数组:
G = [12, 34, 5].
现在,我可以像这样访问第 n 个元素:
G[n]
我现在想用标签在其中推送新数据,所以我希望数组看起来像
G = [12, 34, 5, label:567856, other: Infinity]
我可以在哪里通过电话获得567856
G["label"] //(or Infinity by calling G["other"]). How can I achieve this?
我发现
G[i].push({
label:567856,
other: Infinity
})
但通过这种方式,它将其添加为一个全新的元素,我只能调用 G[4]["其他"],而不是 G["其他"]。如何添加我所描述的元素?
谢谢!
要补充Andriy的答案,你需要使用Javascript对象而不是数组。对象可以具有具有自定义名称的索引。例如,给定
var newObj = {"hello": "world", "value":1, "inf": Infinity}
你可以做
newObj['hello'] // "world"
newObj['value'] // 1
问题所在
G[i].push({
label:567856,
other: Infinity
})
就是你推送一个有 2 个属性的对象,而不是推送 2 个对象,这就是为什么你需要使用 G[4]["other"]
请参阅运行 JSFiddle 示例。
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]["其他"]
JavaScript 中的数组是一种对象。 因此,它们可以包含以下属性:
G.label = 567856;
G.other = Infinity;
与其他对象相比,数组的优势在于它们的索引元素是有序的。
如果您希望数组中的第四和第五个元素567856
和Infinity
,并且希望能够使用 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
或G.other
,这些更改将不会反映在数组的第四个和第五个元素中。
但是,您可以通过使用 Object.defineProperty() 在 G.label
和G.other
上创建资源库来克服这个问题:
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
Object.defineProperty(G, 'label', {
set: function(x) {
this[3] = x;
}
});
Object.defineProperty(G, 'other', {
set: function(x) {
this[4] = x;
}
})
G.label = 99999;
G.other = 11111;
G.forEach(function(val) {
console.log(val); // 12 ... 34 ... 5 ... 99999 ... 11111
});
不是为适合您的情况而设计的。
参见 数组元素从 ECMAScript 262, 5.1 15.4 访问流
数组对象对特定类别的属性给予特殊处理 名字。属性名称 P(字符串值的形式)是一个数组 索引当且仅当 ToString(ToUint32(P)) 等于 P 且 ToUint32(P) 不等于 2^32−1。
因此,您根本无法按字母顺序名称访问 Array 元素,因为该键不会被 ToUint32 解析为整数。
您可以将对象添加到数组中,并在推送到数组后存储其索引(Array.prototype.push 会返回数组的大小):
var G = [1,3,4];
var labelIndex = G.push({'label': 123}) - 1;
console.log(G[labelIndex]["label"]);
实际上,当您的数组中有两个或多个具有相同属性的对象时,该解决方案将适合这种情况。
不推荐以下建议!
但是,您可以使用下面的代码来定义G
Array 属性,但它不是数组中项的属性值,而是数组属性:
G.other = Infinity;
G.label = 567856;
// Access newly created properties
console.log(G["other"]);
console.log(G["label"]);
祝你好运!
- 如何使用jquery解析具有相同标签名称的yahoo天气api数据
- 查找所有TD标签并读取其数据属性
- 使用json数据更改视频标签中的src属性
- 我可以按特定的顺序迭代一个标签中的不同数据标签吗
- 如何将数据标签与数据一起传递,以便在高图中的工具提示中显示
- Highcharts车速表,里程计数器的数据标签
- 如何从标签数据类型=“;无线电”;
- 高图表数据标签重叠
- 删除高图表数据标签上的阴影/背景发光
- jQuery:仅显示新的JSON数据,并使用自己的段落标签进行迭代
- asp.net 数据列表中的跟踪标签 ID
- 如何将具有多个标签的多个的所有数据获取到一个数组中
- 数据ng在Angular中用不同的标签重复
- .scrollInto查看带有数据标记的任何元素,或使用类对带有数据标签的内容进行分段
- 半圆形圆环饼图,饼图上有标签(数据名称)和年龄百分比..和鼠标悬停上的数据编号
- 通过html标签数据属性动态加载js、css文件
- 如何在dc.js中为多标签数据制作行图
- Bootstrap 3标签数据只显示在第一个标签
- AngularJS中每个标签的唯一标签数据
- D3.JS:为我的标签数据结构实现强制导向图