Javascript Path对象路径转换为函数和更新对象

时间:2015-02-08 18:35:47

标签: javascript

我正在研究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);

3 个答案:

答案 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

希望有所帮助。