通过键推送到 JavaScript 数组
Pushing to a JavaScript array via key
本文关键字:JavaScript 数组 更新时间:2023-09-26
我有一个格式化如下的对象;
$scope.data = [
{
key: "Control",
values: [ ]
},
{
key: "Experiment",
values: [ ]
}
];
我只是希望能够通过提供它们的键值来推送到这些数组中的任何一个。
我试过了;
$scope.data.keys("Experiment").values.push(thing);
但我被定义不清。当然这并不难,但我在这里或通过 JS 文档找不到答案
我以这种方式这样做的原因是因为我使用的JS库需要以特定方式提供数据
不是很有效率,但很短:
$scope.data.filter(function(v){return v.key == "Experiment"})[0].values.push(thing)
一种快速的方法:
for (var i = $scope.data.length; i--;) {
if ($scope.data[i].key == "Experiment") {
$scope.data[i].values.push("one more thing")
break
}
}
你应该怎么做:
$scope.data = {
"Control": [],
"Experiment": []
}
$scope.data["Experiment"].push("thing")
演示:
var $scope = {}
$scope.data = [{
key: "Control",
values: []
}, {
key: "Experiment",
values: []
}];
// Short
$scope.data.filter(function(v) {
return v.key == "Experiment"
})[0].values.push("thing")
// Fast
for (var i = $scope.data.length; i--;) {
if ($scope.data[i].key == "Experiment") {
$scope.data[i].values.push("one more thing")
break
}
}
// Output for the Demo
document.write("<pre>" + JSON.stringify($scope.data, null, "'t") + "</pre>")
// !!! What you should do:
$scope.data = {
"Control": [],
"Experiment": []
}
$scope.data["Experiment"].push("thing")
// Output for the Demo
document.write("<pre>" + JSON.stringify($scope.data, null, "'t") + "</pre>")
如果无法更改结构,可以使用Array#some
(ES5)或Array#find
(ES2015),两者都可以在旧版浏览器上填充/填充。
Array#some
:
$scope.data.some(function(entry) {
if (entry.key == "Experiment") {
entry.values.push(thing);
return true;
}
});
Array#find
:
$scope.data.find(function(entry) { return entry.key == "Experiment"}).values.push(thing);
Array#find
ES2015的箭头功能:
$scope.data.find(entry => entry.key == "Experiment").values.push(thing);
只需使用 map
函数即可执行此操作:
$scope.data.map(function(v){
if(v.key=='Experiment') {
v.values.push(thing);
}
});
您可以将其创建为对象而不是数组,然后在需要将其传递给 JS 库时将其转换为数组。
$scope.data = {
"Control" : [ ],
"Experiment" : [ ]
}
// Convert to array
var converted = [];
for (var key in $scope.data) {
if ($scope.data.hasOwnProperty(key)) {
converted.push({ key: key, values: $scope.data[key] });
}
}
// Or using map
var converted = Object.keys($scope.data).map(function(key) {
return { key: key, values: $scope.data[key] };
});
示例小提琴
这是可以正常工作的协议。我已经删除了用于测试的$scope
Array.prototype.addElement = function(key, value){
for(i = 0; i < this.length; i++){
if(this[i]['key'] == key){
this[i]['values'].push(value);
}
}
}
var data = [
{
key: "Control",
values: [ ]
},
{
key: "Experiment",
values: [ ]
}
];
data.addElement("Control", "values");
data.addElement("Control", "values1");
data.addElement("Control", "values2");
data.addElement("Experiment", "values3");
console.log(data);
相关文章:
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 将Javascript数组发送到控制器ASP.NET MVC
- JavaScript数组包含一个值
- 将JavaScript数组传递给函数
- javascript:数组循环
- 将数据存储在javascript数组中以供进一步使用
- 在Javascript数组中查找绝对最大值
- JavaScript数组优化以提高性能
- 在javascript数组中分散数字
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- Javascript数组动态
- javascript数组元素是否知道其封闭数组
- 将 JSON 数组解析为 JavaScript 数组
- 将Transform和Instance Variable转换为对象的JavaScript数组
- 使用Web Html表单创建Javascript数组
- 从重复的javascript数组结果集中只获取一行
- 如何为Javascript数组()的使用准备PHP变量
- Javascript数组和函数
- 为DataTables aoColumnDefs创建JavaScript数组(JSON格式)