js 两层的对象 怎么转化成普通的数组对象?

新手上路,请多包涵
let skus = {
  0: {
    id: 101251,
    name: 1699,
    price: 69.44,
  },
  1: {
   id: 101251,
    name: 1699,
    price: 69.44,
  },
};

这个怎么转换成下面的格式?求解答

let skus = [
  {
    id: 101251,
    name: 1699,
    price: 69.44,
  },
  {
   id: 101251,
    name: 1699,
    price: 69.44,
  },
];
阅读 2.9k
6 个回答
Array.from(Object.values(skus))
Object.values({
  0: {
    id: 101251,
    name: 1699,
    price: 69.44,
  },
  1: {
   id: 101251,
    name: 1699,
    price: 69.44,
  },
})
已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入
  1. 仅仅只需要 skus 的可枚举属性值:
    Object.values(skus)
  2. 需要skus上所有属性,包括 Symbol :

    const result = []  //结果
    const allProps = [...Object.getOwnPropertyNames(skus),...Object.getOwnPropertySymbols(skus)]
    allProps.forEach(p=>result.push(skus[p]))

希望能解答你的问题。

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。

作为这处 ArrayLike 类型的对象,只需要有 length 属性就可以用 Array.from() 转成数组,比如

let skus = {
    0: { id: 101251, name: 1699, price: 69.44, },
    1: { id: 101251, name: 1699, price: 69.44, },
};

console.log(Array.from({...skus, length: 2));

或者可以找到所有数字 key,取最大值来算 length

const length = 1 + Math.max(
    ...Object.keys(skus)
        .map(key => parseInt(key, 10))
        .filter(n => !isNaN(n))
);

这种做法会过滤掉非数字键属性,而且如果中间有断开的 index,会补 undefined,示例

let skus = {
    0: { id: 101251, name: 1699, price: 69.44, },
    1: { id: 101251, name: 1699, price: 69.44, },
    a: "hello",
    5: { id: 0 }
};

const length = 1 + Math.max(
    ...Object.keys(skus)
        .map(key => parseInt(key, 10))
        .filter(n => !isNaN(n))
);

console.log("length", length);
console.log(Array.from({ ...skus, length }));

输出:

length 6
[
  { id: 101251, name: 1699, price: 69.44 },
  { id: 101251, name: 1699, price: 69.44 },
  undefined,
  undefined,
  undefined,
  { id: 0 }
]

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。
新手上路,请多包涵
let skus = {
  0: {
    id: 101251,
    name: 1699,
    price: 69.44,
  },
  1: {
   id: 101251,
    name: 1699,
    price: 69.44,
  },
}

skus = Object.values(skus)

Object.values() 可以返回一个给定对象自身的所有可枚举属性值的数组

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题