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”]}