javascript - 在将数组索引推送到新数组之前如何分配数组索引
问题描述
我正在尝试使用新的carrier_id
and更新特定的数组索引name
。
但是,我遇到了一个令人费解的分配问题。
带有 out 和 nData 的注释行Note #1
看起来很好,否则它的 order 属性似乎在调用 updateNormalizedData 之前设置。
let data = JSON.parse('[{"order":{"po_no":"po_2019","ship_details":{"carrier_id":1044777,"method":"FREE Shipping"},"sub_total":0},"items":[{"header":{"set_no":0,"carrier_id":104777,"po_no":"po_2019"},"line":{"item_id":"ABC RE1000","line_no":0}},{"header":{"set_no":0,"carrier_id":104777,"po_no":"po_2019"},"line":{"item_id":"ABC DA1111","line_no":1}}]}]');
let numSet = 0;
let numLine = 1;
let args = {"carrier_id": 555111};
function normalizeData(data, numSet, numLine, args) {
let i = 0, j = 0, l = data.length;
let normalizedDataSet = [];
// console.log(data[i])
for (i = 0; i < l; i++) {
let m = data[i]['items'].length;
for (j = 0; j < m; j++) {
data[i]['items'][j]['order'] = { ...data[i]['order'] }; // Destructure data to assign value, not object reference
normalizedDataSet.push(data[i]['items'][j]);
}
}
// console.log('nData', normalizedDataSet);
updateNormalizedData(normalizedDataSet, numSet, numLine, args); // Note #1
}
function updateNormalizedData(normalizedDataSet, numSet, numLine, args) {
let i;
let n = normalizedDataSet.length;
let newNormal = [];
for (i = 0; i < n; i++) {
let index = { ...normalizedDataSet };
if (numSet === index[i]['header']['set_no'] && numLine === index[i]['line']['line_no']) {
let shipMethods = JSON.parse('[{"id":103366,"name":"FREE Shipping"},{"id":200200,"name":"BEST"},{"id":555111,"name":"COLLECT"}]');
let shipMethod = shipMethods.filter(item => { return item.id === args.carrier_id }); // [0]['name'];
console.log("date_updated this index", i);
index[i]['order']['ship_details']['carrier_id'] = args.carrier_id;
index[i]['order']['ship_details']['method'] = shipMethod[0]['name'];
newNormal.push(index[i]); // Should update order.ship_details.carrier_id
} else {
console.log("Use original index");
newNormal.push(normalizedDataSet[i]); // Should NOT update order.ship_details.carrier_id
}
}
console.log('new normal', JSON.stringify(newNormal));
}
normalizeData(data, numSet, numLine, args);
我不确定如何在调用分配它的函数“之前”分配属性。
我猜这可能与数据解构有关,但我不确定。
非常感谢任何指导/帮助。
在此示例中,我尝试仅{ "setNo": 0, "lineNo": 1 }
使用新的正常订单数据进行更新,但正在设置第 0 行和第 1 行。
解决方案
推荐阅读
- ios - 我的精灵节点不会出现在我的场景中
- python - 设计选择:如何用 100k+ 向量包装大文件
- node.js - 如何提供一个非常基本的节点服务器来为本地测试提供 web 组件?
- django - 模型表单无法验证和发布
- javascript - 如何在javascript(js)中将文本输入转换为元素输入?
- javascript - JavaScript 递归:使用递归获取数组的长度而不访问其长度属性
- reactjs - SearchIcon 上的媒体查询不起作用。Material-UI, React
- ponyorm - 聚合的查询语法不像宣传的那样工作
- javascript - 如何在 PHP if/else 语句中调用 JavaScript 文件?
- r - 在 stat_function 图中创建锐利的垂直线