Javascript 如何确定对象是否类似数组并将其转换为数组?
我正在使用,它返回两个对象之间的差异 问题是如果我有Javascript 如何确定对象是否类似数组并将其转换为数组?,javascript,Javascript,我正在使用,它返回两个对象之间的差异 问题是如果我有 const objectA = { fieldA: 5, fieldB: ['123'] } const objectB = { fieldA: 5, fieldB: ['123', '456'] } 然后它返回 const diff = { fieldB: { 0: '456' } } 当需要响应对象时 const diff = { fieldB: ['456'] } 如何检测diff.fieldB
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 diff={
菲尔达:“一些弦”,
字段B:{
3: '123',
5: '456'
},
};
常量时间顺序=(对象)=>{
设计数器=0;
for(让道具插入对象){
if(对象[prop]){
对象[计数器]=对象[道具];
删除对象[prop];
计数器++;
}
}
返回对象;
};
const result=Object.fromEntries(
Object.entries(diff.map)([k,v])=>
typeof v==='string'
?[k,v]
:[k,Object.assign([],按时间顺序排列(v))],
);
控制台日志(结果)代码>您可以获取条目,将类似数组的对象转换为数组,并将数组作为目标,然后再转换回对象
const
diff={fieldB:{0:'456'}},
结果=Object.fromEntries(Object.entries(diff.map)([k,v])=>[k,Object.assign([],v)]);
控制台日志(结果)代码>如果没有类似数组的对象,该怎么办?那么,该对象可能包含具有数组或字符串值的属性。您的答案对于我发布的用例非常有效,但有时diff对象可以是const diff={fieldA:10,fieldB:{3:'456'}}
,其中fieldB.length==4
。这意味着fieldA
发生了变化,fieldB
也发生了变化--fieldB
中的变化是对数组的一个元素的添加。然而,我以您的方法为基础解决了这个问题。我必须再做几次转换,比如确保它是{0:'456'}
而不是{3:'456'}
,但我想这没关系。您好,对不起,我知道没有问这个问题,但是如果它是常量diff={fieldA:'someString',fieldB:{0:'456'}
,结果很有趣,字符串值只有一个字母<代码>{“fieldA”:[“s”、“o”、“m”、“e”、“s”、“t”、“r”、“i”、“n”、“g”]、“fieldB”:[“456”]}