gpt4 book ai didi

javascript - 动态更新/创建对象属性

转载 作者:行者123 更新时间:2023-11-30 18:36:02 26 4
gpt4 key购买 nike

我正在创建一个功能,它提供 get() 和 set() 函数来从 JavaScript 对象读取和更新值。诀窍是我使用点符号字符串来指定属性。

我的 get() 工作正常,我遇到问题的是 set()。

示例数据:

var data = {
person: {
name: 'Fred',
birthday: '19840101',
address: {
street: '123 Main St.',
city: 'Anytown',
state: 'NY',
zip: '123123'
},
family: {
spouse: 'Sally',
children: ['Sam', 'Frank', 'Susan']
}
}
};

get() 函数:

function get (path) {
var parts = path.split('.'),
tmp = data;
for (var i = 0, l = parts.length; i < l; ++i) {
if (tmp[parts[i]]) {
tmp = tmp[parts[i]];
}
else {
tmp = null
break;
}
}
return tmp;
}

console.log(get('person.name')); // Fred
console.log(get('person.family.children')); // ['Sam', 'Frank', 'Susan']
console.log(get('person.jobs.apple')); // null

set() 函数:

var foo = null;
function set (path, val) {
var parts = path.split('.')
tmp = {},
foo = data;

for (var i = 0, l = parts.length; i < l; ++i) {
if (tmp[parts[i]]) {
tmp = data[parts[i]];
}
else {
tmp = {};
}
if (i+1 === l) {
tmp = val;
}
data[parts[i]] = tmp;
}
}

set('person.name', 'Dave'); // replace existing name
set('person.family.children', ['Tim', 'Matt', 'Kathy']); // replace existing array
set('person.jobs.apple', 'developer'); // should create the necessary properties
console.log(data);

我最终得到以下对象:

obj = {
person: {},
name: "Dave",
family: {},
children: ["Tim","Matt","Kathy"],
jobs: {},
apple: "developer"
}

关于如何实现这一点有什么想法吗?

最佳答案

您实际上根本不需要任何功能。

看到这个

var data = {
person: {
name: 'Fred',
birthday: '19840101',
address: {
street: '123 Main St.',
city: 'Anytown',
state: 'NY',
zip: '123123'
},
family: {
spouse: 'Sally',
children: ['Sam', 'Frank', 'Susan']
}
}
};

alert(data.person.name);
data['person']['name'] = 'Tim';
alert(data['person']['name']);

还有这个答案可能有帮助

Javascript object key value coding. Dynamically setting a nested value

关于javascript - 动态更新/创建对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8178357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com