我有一个名称/值对的JSON数组,我正在寻找一种合理的方法来调整数组中特定名称的值。 e.g。
var myArr = [{"name":"start","value":1},{"name":"end","value":15},{"name":"counter","value":"6"},{"name":"user","value":"Bert"}]
我可以用
$.each(myArr, function (key, pair) {
if (pair.name == 'user')
{
pair.value = 'bob';
}
});
但实际上我的对象有几十个值,我希望能够比为每个值添加if
更简单地更改它们。
理想情况下myArr['user'].value = 'bob';
或类似内容。
答案 0 :(得分:0)
数组中有一个对象数组。数组没有任何索引方法可以像您要求的那样直接查找;
myArr['user'].value = 'bob';
要实现这一点,您需要重新构建数据,以便您拥有一个名称为主键的对象,并且该键内部是另一个对象,其中包含该用户的其余数据,如下所示:
var myData = {
"start": {value: 1},
"end": {value: 15},
"user": {value: Bert}
};
您可以按名称直接访问:
myData['user'].value = 'bob;
如果你想坚持现有的数据结构,那么我能想到的最简单的事情就是创建一个找到正确对象的简单函数:
function findUser(data, nameToFind) {
var item;
for (var i = 0; i < myArr.length; i++) {
item = nameToFind[i];
if (item.name === nameToFind) {
return item;
}
}
}
var myArr = [{"name":"start","value":1},{"name":"end","value":15},{"name":"counter","value":"6"},{"name":"user","value":"Bert"}]
然后,你可以这样做:
findUser(myArr, "user").value = "bob";
这假设您只是在查找数组中的数据,否则,除非您向其中添加错误检查,否则会产生错误。
如果你真的想将整个事物变成一个找到并更改名称的函数,它可以是这样的:
function changeUser(data, nameToFind, newName) {
var item;
for (var i = 0; i < myArr.length; i++) {
item = nameToFind[i];
if (item.name === nameToFind) {
item.name = newName;
return;
}
}
}
答案 1 :(得分:0)
添加此功能:
function SetArrayValue(arr, key, value, stopOnFirstMatch) {
for (var i=0; i<arr.length; i++) {
if (arr[i].name === key) {
arr[i].value = value
if (stopOnFirstMatch !== undefined && stopOnFirstMatch) return
}
}
}
然后以这种方式使用它:
SetArrayValue(myArr, 'user', 'bob')
答案 2 :(得分:0)
我将奖励积分以获得最佳答案,但我实际上以完全不同的方式解决了这个问题:
首先按照出现的顺序建立一个“名字”列表:
var keys = [];
$.each(myArr, function (key, pair) {
keys.push(pair.name);
});
然后我可以使用:
myArr[keys.indexOf('sEcho')].value = 'whatever';
答案 3 :(得分:0)
试试这个 $ .grep(myArr,function(e){return e.name ==“user”})[0] .value =“ppp”
您可以使用jquery的$ .greb()。