首页 > 解决方案 > 如何判断对象是否类数组并将其转换为数组?

问题描述

我正在使用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);

标签: javascript

解决方案


您可以获取条目,将类似对象的数组Object.assign转换为以数组为目标的数组,然后再转换回对象。

const 
    diff = { fieldB: { 0: '456' } },
    result = Object.fromEntries(Object.entries(diff).map(([k, v]) => [k, Object.assign([], v)]));

console.log(result);


推荐阅读