【发布时间】:2021-06-22 00:17:43
【问题描述】:
预期功能: 创建一个新 数组,该数组会改变对象数组中的值。新值将是对象,其键 value 是原始值,另一个键 duplicate 是一个布尔值,如果该值与同一位置的其他对象值相同。
我正在尝试循环该数组,然后创建另一个包含不是当前索引的索引的数组。
在不影响原始输入的情况下创建一个深拷贝,然后循环原始数组,每次循环都会捕获当前对象的键。
我并没有试图改变任何比第一个范围更深的值,这就是我的原因,只是改变了typeof !== "object"
然后我设置当前索引,并且value 的新对象的键将保持原始值,但与当前索引相比,duplicate 将是其他索引的映射,然后使用.some 方法简化为单个布尔值。
深拷贝中的每个值都设置好后,return 它。
我目前正试图创建一个包含不是当前索引的索引的数组。
const testState = [
{
value1: "1",
value2: "two",
value3: 3,
},
{
value1: "one",
value2: 2,
value3: "3",
},
{
value1: "1",
value2: 2,
value3: "3",
},
];
const testEquality = (accountArray) => {
// Deep copy (shallow copies were letting values change)
const returnedArray = JSON.parse(JSON.stringify(accountArray));
accountArray.forEach((account) => {
// assign an array that contains ever other index
const otherIndexes = [];
for (const key in account) {
if (typeof key !== "object") {
returnedArray[i][key] = {
value: accountArray[i][key],
// loop every other index, and compare to accountArray[i][key]
// ex: otherIndexes.map(index => accountArray[index][key] === accountArray[i][key]).some(i => i)
duplicate: false,
};
}
}
});
return returnedArray;
};
testState = testState.map((obj) => testEquality(obj));
console.log(testState);
// output
[
{
value1: { value: "1", duplicate: true },
value2: { value: "two", duplicate: false },
value3: { value: 3, duplicate: false },
},
{
value1: { value: "one", duplicate: false },
value2: { value: 2, duplicate: true },
value3: { value: "3", duplicate: true },
},
{
value1: { value: "1", duplicate: true },
value2: { value: 2, duplicate: true },
value3: { value: "3", duplicate: true },
},
];
我并没有超越整个重构,并且被告知这太低效了,我已经尝试了不同的方法,这只是我得到的最接近的方法。
【问题讨论】:
-
这些说明听起来像是来自作业?如果是,请使用 blockquote 语法将它们格式化为引号。
标签: javascript reactjs ecmascript-6 logical-operators deep-copy