假设我有以下随机对象:
{
people: [
{
id: 257293,
cost: {
amount: 7,
currency: 'USD',
}
},
{
id: 257293,
cost: {
amount: 3000,
currency: 'USD',
}
},
],
jobs: [
{
name: 'Dentist',
id: 213213,
salary: {
amount: 400,
currency: 'USD',
}
},
{
name: 'Soccer player',
id: 235325,
salary: {
amount: 400,
currency: 'USD',
}
},
{
name: 'cleaner',
id: 34734737,
salary: {
amount: 400,
currency: 'USD',
}
},
],
food: 'ketchup',
}
我需要更新字段的以下密钥:
var key = '.jobs#213213.salary.amount';
var update_value = 700;
有没有简单的方法来获取和更新我的对象?任何想法或想法?
编辑:
我的问题与this问题不同,因为我希望通过对象的id访问数组而不是数组索引('jobs#235325'
235325是内部对象的id属性。)
编辑2: 由于某种原因我的问题被标记为重复(它不重复)我提供了我在这里找到的答案。
function findById(source, id) {
for (var i = 0; i < source.length; i++) {
if (source[i].id === id) {
return source[i];
}
}
}
Object.byString = function(o, s) {
s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
s = s.replace(/^\./, '');
var a = s.split('.');
for (var i = 0, n = a.length; i < n; ++i) {
var k = a[i];
var g = k.split('#');
if (g) {
k = g[0];
}
if (k in o) {
o = o[k];
if (g[1]) {
o = findById(o, parseInt(g[1]));
}
} else {
return;
}
}
return o;
}