我正在研究Javascript并希望将对象路径传递给该函数并更新该对象。为什么对象不会更新?并且除了返回之外还有一种灵活的方式让它工作,或者除了将整个对象传递给函数并指定里面的路径之外? THX
var stock={
basket:{
apple:3,
orange:2
},
table:{
apple:5,
orange:5
}
};
function change(path, amount){
path+=amount;
}
// calling function
change (stock.table.apple,-2);
console.log(stock.table.apple);
答案 0 :(得分:0)
function change(path, amount){
var key = Object.keys(path)[0];
path[key] += amount;
}
// calling function
change (stock.table,-2);
console.log(stock.table.apple);
您只能发送部分内容进行更新
答案 1 :(得分:0)
这个很棘手。您使用change
中存储的值调用stock.table.apple
函数,而不是实际路径。
您的函数调用是change(5, -2)
。
您可以将对象引用+路径作为字符串传递:
change(stock, "table.apple", -2) // look for attributes of the stock object
或整个路径作为字符串,如:
change("stock.table.apple", -2) // look for attributes of the window object
答案 2 :(得分:0)
问题是stock.table.apple
不是参考。它是值5
。因此:
change(stock.table.apple, -2)
= change(5, -2)
path = 5
amount = -2
path += amount
path = 3
amount = -2
如您所见,path += amount
更改了path
的值,而不是stock.table.apple
的值。
解决此问题的一种方法如下:
var stock = {
basket: {
apple: 3,
orange: 2
},
table: {
apple: 5,
orange: 5
}
};
function change(object, key, amount) {
object[key] += amount;
}
change(stock.table, "apple", -2);
alert(stock.table.apple);
上述代码有效,因为stock.table
是参考值。以下答案将帮助您理解参考值和原始值之间的区别:
Primitive value vs Reference value
希望有所帮助。