javascript - 如何判断对象是否类数组并将其转换为数组?
问题描述
我正在使用dep-object-diff,它返回两个对象之间的差异。
问题是,如果我有类似的东西,
const objectA = {
fieldA: 5,
fieldB: ['123']
}
const objectB = {
fieldA: 5,
fieldB: ['123', '456']
}
然后它返回,
const diff = {
fieldB: {
0: '456'
}
}
当所需的响应对象应该是,
const diff = {
fieldB: ['456']
}
如何检测是否diff.fieldB
是一个数组(动态,没有硬编码),然后将其转换为一个?
编辑
感谢@Nina Scholz,我最终以她的方法为基础。然而,我发现我的数据的问题是该方法不适用于字符串。无论如何,我最终实现它如下:
const diffs = {
fieldA: "SOME_STRING",
fieldB: {
3: '123',
5: '456'
},
};
const chronologize = (object) => {
let counter = 0;
for (let prop in object) {
if (object[prop]) {
object[counter] = object[prop];
delete object[prop];
counter++;
}
}
return object;
};
const result = Object.fromEntries(
Object.entries(diffs).map(([k, v]) =>
typeof v === 'string'
? [k, v]
: [k, Object.assign([], chronologize(v))]),
);
console.log(result);
解决方案
您可以获取条目,将类似对象的数组Object.assign
转换为以数组为目标的数组,然后再转换回对象。
const
diff = { fieldB: { 0: '456' } },
result = Object.fromEntries(Object.entries(diff).map(([k, v]) => [k, Object.assign([], v)]));
console.log(result);
推荐阅读
- python - 如何在不使用 Jupyter Notebook 的情况下使用 SchemDraw 绘制示意图?
- mysql - MS Outlook 和 MySQL 之间的集成
- linux - 我可以依靠能够在 Linux 上的共享内存上使用 F_SETLK 吗?
- python - 一段时间后执行一个函数
- azure - 逻辑应用文件系统连接器是否适用于 DFS?
- android - 防止 FloatingActionButton 在 CollapsingToolbarLayout 上消失
- python - 如何从多索引 groupby 数据框创建散点图
- python - sklearn RandomForestClassifier 的 class_weights 似乎没有效果
- linux - 在另一个文本文件的文件中运行命令
- pandas - 熊猫无法读取缺少数据的 csv 文件