如何将单个键值对对象转换为带有键值对的对象数组?

时间:2020-09-24 05:59:22

标签: javascript

我只有一个键-值对对象,每个键都有一个数组作为值,如何通过与另一个对象数组进行比较将其转换为具有键-值对属性的对象数组。

var keys = [];

for (var k in obj) keys.push(k);

输入:

obj =  {
          "name": "jack",
          "age": 10,
          "country": "india",
          "state": "Delhi"
        }
        obj2 = [{key: "product", type:"", value:"", required:"true", mandatory:"true"},
        {key: "sub-product", type:"", value:"", required:"true", mandatory:"true"},
        {key: "name", type:"text", value:"", required:"true", mandatory:"true"},
        {key: "age", type:"text", value:"[0-9]", required:"true", mandatory:"true"},
        {key: "country", type:"text", value:"[a-z]", required:"true", mandatory:"true"},
        {key: "state", type:"text", value:"[a-z]", required:"true", mandatory:"true"}]

预期输出:

result = [{key: "name", type:"text", value:"", required:"true", mandatory:"true",setValue:"jack"},
        {key: "age", type:"text", value:"[0-9]", required:"true", mandatory:"true",setValue:"10"},
        {key: "country", type:"text", value:"[a-z]", required:"true", mandatory:"true",setValue:"india"},
        {key: "state", type:"text", value:"[a-z]", required:"true", mandatory:"true",setValue:"Delhi"}];

3 个答案:

答案 0 :(得分:0)

您可以先使用hasOwnProperty对其进行过滤,然后将其映射为set setValue属性。这是实现:

var obj = { "name": "jack", "age": 10, "country": "india", "state": "Delhi" };
var obj2 =[{key: "product", type:"", value:"", required:"true", mandatory:"true"}, {key: "sub-product", type:"", value:"", required:"true", mandatory:"true"}, {key: "name", type:"text", value:"", required:"true", mandatory:"true"}, {key: "age", type:"text", value:"[0-9]", required:"true", mandatory:"true"}, {key: "country", type:"text", value:"[a-z]", required:"true", mandatory:"true"}, {key: "state", type:"text", value:"[a-z]", required:"true", mandatory:"true"}];


var result = obj2.filter(k=>obj.hasOwnProperty(k.key)).map(p=>({...p, setValue:obj[p.key]}));

console.log(result);

答案 1 :(得分:0)

obj2。如果key的值是obj的属性,请将相应的值复制到对象的setValue属性中,然后将其压入结果。

obj = {
  "name": "jack",
  "age": 10,
  "country": "india",
  "state": "Delhi"
};
obj2 = [{key: "product", type="", value="", required="true", mandatory="true"},
        {key: "sub-product", type="", value="", required="true", mandatory="true"},
        {key: "name", type="text", value="", required="true", mandatory="true"},
        {key: "age", type="text", value="[0-9]", required="true", mandatory="true"},
        {key: "country", type="text", value="[a-z]", required="true", mandatory="true"},
        {key: "state", type="text", value="[a-z]", required="true", mandatory="true"}];

var result = [];
obj2.forEach(o => {
  if (o.key in obj) {
    o.setValue = obj[o.key];
    result.push(o);
  }
});
console.log(result);

答案 2 :(得分:0)

您可以使用Array.prototype.flatmap实现这一目标

const obj = {
  "name": "jack",
  "age": 10,
  "country": "india",
  "state": "Delhi"
}
const obj2 = [
  {key: "product", type:"", value:"", required:"true", mandatory:"true"},
  {key: "sub-product", type:"", value:"", required:"true", mandatory:"true"},
  {key: "name", type:"text", value:"", required:"true", mandatory:"true"},
  {key: "age", type:"text", value:"[0-9]", required:"true", mandatory:"true"},
  {key: "country", type:"text", value:"[a-z]", required:"true", mandatory:"true"},
  {key: "state", type:"text", value:"[a-z]", required:"true", mandatory:"true"}
]

const result = obj2.flatMap((entry) => {
  if (obj[entry.key]) {
    return {
      ...entry,
            setValue: obj[entry.key],
    }
  }
    return []
})

console.log(result)