gpt4 book ai didi

javascript - 获取已更改的属性列表?

转载 作者:行者123 更新时间:2023-12-01 00:25:50 24 4
gpt4 key购买 nike

这是 UpdateTotals 的示例函数。

function updateTotals(data) {
let grandTotal = 0;
let totalTax = 0;

data.Items.forEach(item => {
const qty = parseInt(item.Qty, 10);
const price = parseFloat(item.Price);
const tax = parseFloat(item.Tax);

const totalExc = price * qty;
const totalInc = (price * qty) + tax;

item.TotalExc = totalExc.toFixed(2);
item.TotalInc = totalInc.toFixed(2);

grandTotal += totalInc;
totalTax += tax;
});

data.Totals.GrandTotal = grandTotal.toFixed(2);
data.Totals.TotalTax = totalTax.toFixed(2);

return data;
}

这只是几个例子的属性已经重新计算的总和,比如:data.Items[x].TotalExcdata.Items[x].TotalIncdata.Totals.GrandTotal

实际上,Items 数组中和 Items 属性之外还有更多字段。

如何获取已更新的属性列表(总和),以便将属性传递到数据库(例如 NoSQL)进行更新?

最佳答案

这是人为的,但这样的事情......

const foo = {
type: "fruit",
name: "apple",
color: "red"
};

const bar = {
type: "fruit",
name: "banana",
color: "yellow"
};

function findChangedProps(prev, current) {
const changedProps = [];

for (const prop in prev) {
if (prev[prop] !== current[prop]) {
changedProps.push(prop);
}
}

return changedProps;

}

console.log(findChangedProps(foo, bar));

如果你使用像 React 这样的库,它提供了内置的方法来执行此操作,但如果你只是使用 Vanilla JS,据我所知,没有用于此的 API。

---- 更新 ----

一些同事告诉我新的Proxy我不知道的API。这允许您的函数创建您更新的代理对象。

var changedProps = [];

var foo = {
type: "apple",
color: "red"
};

var catcher = {
set: function(obj, prop) {
changedProps.push(prop);
return Reflect.set(...arguments);
}
};

var p = new Proxy(foo, catcher);

console.log("p before mutation", p);

p.color = "yellow";

console.log("p after mutation", p);

console.log("foo recieves mutation too", foo);

console.log("changedProps", changedProps);

关于javascript - 获取已更改的属性列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59013024/

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