如何在跳过未定义的同时将JS键对象转换为键数组?

时间:2019-07-12 13:58:49

标签: javascript arrays object vue.js key-value

如何转换此JS对象:

users = {
  1: { id: 1, name: "..." },
  2: { id: 2, name: "..." },
  // 3 is missing
  4: { id: 4, name: "..." },
  ...
}

放入数组:

usersArray = [
  1: { id: 1, name: "..." },
  2: { id: 2, name: "..." },
  // 3 is missing -- I do not want undefined here
  4: { id: 4, name: "..." },
  ...
]

关键是我不要未定义的空格,关键必须是对象ID。我不希望出现空格/未定义的条目的原因是因为我使用了vue.js,并且我很确定它不会对v-for中具有未定义值的数组进行迭代。

类似:https://forum.vuejs.org/t/vuex-best-practices-for-complex-objects/10143/2,但没有附加数组仅存储id。

这可能吗?

2 个答案:

答案 0 :(得分:3)

您可以使用Object.values()

const users = {
  1: { id: 1, name: "..." },
  2: { id: 2, name: "..." },
  4: { id: 4, name: "..." },
};
console.log(Object.values(users))

答案 1 :(得分:1)

您可以通过将对象分配给数组来创建缺少索引的稀疏数组。如您所见,forEachmap不会访问稀疏项。

var users = { 1: { id: 1, name: "..." }, 2: { id: 2, name: "..." }, 4: { id: 4, name: "..." } },
    array = Object.assign([], users);

array.forEach((o, i) => console.log(i, o));
.as-console-wrapper { max-height: 100% !important; top: 0; }