我有一个格式如下的对象;
$scope.data = [
{
key: "Control",
values: [ ]
},
{
key: "Experiment",
values: [ ]
}
];
我只是想通过提供键值来推送到其中一个数组。
我试过了;
$scope.data.keys("Experiment").values.push(thing);
但是我没有定义。 当然这不是很难,但我在这里或通过JS文档找不到答案
我这样做的原因是因为我正在使用的JS库需要特定方式的数据
答案 0 :(得分:2)
效率不高但很短:
$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>")
&#13;
答案 1 :(得分:1)
如果您无法更改结构,则可以使用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);
答案 2 :(得分:-1)
只需使用map
功能执行此操作:
$scope.data.map(function(v){
if(v.key=='Experiment') {
v.values.push(thing);
}
});
答案 3 :(得分:-1)
您可以将其创建为对象而不是数组,然后在需要将其传递给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] };
});
答案 4 :(得分:-1)
这是可以正常工作的协议。我已经删除了测试的范围
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);