基于键从对象创建值数组

时间:2020-12-30 20:29:50

标签: javascript

如果我有对象

post = {
title: "Title",
image_1: "1234",
image_2: "2345"
}

我想得到一个数组:

["1234", "2345"]

这就是我如何过滤要包含在数组中的属性

Object.keys(post).filter(key =>
  key.includes("image")
);

并获取一组正确的键。我如何获取值?

5 个答案:

答案 0 :(得分:4)

一种方法是先进行过滤,然后映射对象查找:

Object.keys(post)
    .filter(key => key.includes("image"))
    .map(key => post[key])

或者,使用 Object.entries 获取键和值:

Object.entries(post)
    .filter(([key, value]) => key.includes("image"))
    .map(([key, value]) => value)

或者,使用 "filter and map" operation

Object.entries(post)
    .flatMap(([key, value]) => key.includes("image") ? [value] : [])

答案 1 :(得分:3)

您可以使用 Object.entries 获取键值对列表,并使用 .forEach 对其进行迭代:

const post = {
  title: "Title",
  image_1: "1234",
  image_2: "2345"
};

const res = [];

Object.entries(post).forEach(([key,value]) => {
  if(key.includes("image")) res.push(value);
});

console.log(res);

答案 2 :(得分:0)

const post = { title: "Title", image_1: "1234", image_2: "2345" };
const keys = Object.keys(post).filter(key => key.includes("image"));
const output = keys.map(key => post[key]);
console.log(output); // [ '1234', '2345' ]

答案 3 :(得分:0)

您可以在 reduce 上使用 Object.entries 方法并检查键 startsWith 是否为特定字符串。

const post = {
  title: "Title",
  image_1: "1234",
  image_2: "2345"
}

const result = Object
  .entries(post)
  .reduce((r, [k, v]) => {
    if (k.startsWith('image')) r.push(v);
    return r;
  }, [])

console.log(result)

答案 4 :(得分:0)

Object.entries 获取条目,然后过滤以 image 开头的条目:

let post={title:"Title",image_1:"1234",image_2:"2345"};

let result = Object.entries(post)
.filter(e => e[0].startsWith('image'))
.flatMap(e => e[1])

console.log(result)