操作数组对象内的数据[重复]
Posted
技术标签:
【中文标题】操作数组对象内的数据[重复]【英文标题】:manipluate data inside an array object [duplicate] 【发布时间】:2019-07-15 00:44:47 【问题描述】:我想遍历一个对象并对数据进行一些更改。如果我实际处理一个对象或包含多个对象的数组,我不是 100%,所以任何帮助表示赞赏。
这是我的对象:
var screening =
source: "jacket",
value:
Cyan:
dotshape: "C",
frequency: 120,
angle: 67.5
,
Magenta:
dotshape: "C",
frequency: 120,
angle: 37.5
,
Yellow:
dotshape: "C",
frequency: 120,
angle: 82.5
,
"PANTONE 3528 C":
dotshape: "C",
frequency: 120,
angle: 7.5
,
"PANTONE 293 C":
dotshape: "C",
frequency: 120,
angle: 7.5
,
"PANTONE 2748 C":
dotshape: "C",
frequency: 120,
angle: 7.5
,
Varnish:
dotshape: "C",
frequency: 120,
angle: 0
在里面,我基本上想根据 2 个列表来查找和替换“键”(再次不确定术语)。
Old = [Cyan, Magenta, Yellow]
new = [changedName1, changedName2, changedName3]
理想情况下,我希望循环查看当前对象,如果它与数组 Old 中的某些内容匹配,则根据 New 重命名它。如果没有与数组 Old 中的某些内容匹配,则忽略它并保持原样。
提前致谢
【问题讨论】:
【参考方案1】:使用delete
删除旧属性,使用[]
(方括号表示法)和indexOf
获取旧属性并创建新属性:
var screening =
source: "jacket",
value:
Cyan:
dotshape: "C",
frequency: 120,
angle: 67.5
,
Magenta:
dotshape: "C",
frequency: 120,
angle: 37.5
,
Yellow:
dotshape: "C",
frequency: 120,
angle: 82.5
,
"PANTONE 3528 C":
dotshape: "C",
frequency: 120,
angle: 7.5
,
"PANTONE 293 C":
dotshape: "C",
frequency: 120,
angle: 7.5
,
"PANTONE 2748 C":
dotshape: "C",
frequency: 120,
angle: 7.5
,
Varnish:
dotshape: "C",
frequency: 120,
angle: 0
;
function oldToNew(oldNames, newNames)
Object.entries(screening.value).forEach(([key, prop]) =>
if (oldNames.includes(key))
screening.value[newNames[oldNames.indexOf(key)]] = screening.value[key];
delete screening.value[key];
);
oldToNew(["Cyan", "Magenta", "Yellow"], ["Blue", "Purple", "Orange"]);
console.log(screening.value);
注意:属性不会按顺序排列,因为如ECMAScript Specification所示:
ECMAScript object 是 properties
的unordered
集合
【讨论】:
嗨 JackThats 非常感谢。我对 JS 非常陌生,但一直在学习。我可以遵循 IF 语句,但我无法理解 Object.entries(screening.value).forEach(([key, prop]) 之前的那一行 .. 道具在做什么?当我运行代码时,我得到以下信息错误,即使它似乎在 1 个错误之上完美工作:6:ReferenceError: Invalid left-hand side in assignment 1 info (from 42 to 43): Object.entries(screening.value).forEach(([key, prop]) => 1 info ReferenceError: Invalid left-hand side in assignment 1 error Script Execution Error以上是关于操作数组对象内的数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript:查找值是不是在数组中的对象内的最佳方法[重复]
使用 mongoose 在 mongoDb 中更新数组内的对象 [重复]
如何从数组中删除重复值?当数组内的对象属性未定义时,我的代码失败