【问题标题】:Converting Object to Object array pattern [closed]将对象转换为对象数组模式 [关闭]
【发布时间】:2020-11-20 06:26:58
【问题描述】:

我有一个包含数据的对象,现在我想以特定模式对其进行转换。

下面是我的对象

{
    _groups: ["d1830f7c-12ac-4abf-bc03-f0b70e26f8f2", "d0348b51-dcaa-2227-f0ff-912b27100aee"],
    _eror: "",
    number: "",
    seen_days: Infinity, // dont count this if this is Infinity or make add it
    address: "",
    status: "ACTIVE"
}

现在如果我想把它转换成下面的模式。

 [
        {
            "field": "status",
            "value": "ACTIVE",
            "operator": "equal"
        },
        {
            "field": "_groups",
            "value": "d1830f7c-12ac-4abf-bc03-f0b70e26f8f2",
            "operator": "equal"
        },
        {
            "field": "_groups",
            "value": "d0348b51-dcaa-2227-f0ff-912b27100aee",
            "operator": "equal"
        }
]







const convert = (obj) => {
  const arr = [];
  obj._groups.forEach((el) => {
    arr.push({
      field: "_groups",
      value: el,
      operator: "equal",
    });
  });
  console.log(obj)
  
  var key = Object.keys(obj);
  var value = obj[key];
  arr.push({
    field: value,
    value: obj.status,
    operator: "equal",
  });
  return arr;
}

目前正在尝试此功能,但未按预期工作。

  • 仅包括那些有数据的字段,排除其他字段也 Infinity
  • 需要转换为数组对象的对象是动态的,每次数据都会不同但需要转换成上述模式(数组对象模式)。
  • Motive 是将数组对象的模式与为动态对象提供数据相匹配。(数据将不同,但应将其转换为上述模式。)

【问题讨论】:

  • data 已经是复数了 :P data 的单数是 datum。
  • 请说明您目前是如何解决的。您当前的代码。以及你被困在哪里。
  • 运营商属性从何而来?它总是只是“相等”还是什么?
  • @Iwrestledabearonce。是的,它总是相等的,而且我已经用我一直在尝试设置的功能更新了这个问题。请帮忙

标签: javascript node.js arrays reactjs


【解决方案1】:
    const x = {
    _groups: ["d1830f7c-12ac-4abf-bc03-f0b70e26f8f2", "d0348b51-dcaa-2227-f0ff-912b27100aee"],
    _eror: "",
    number: "",
    seen_days: Infinity, // dont count this if this is Infinity or make add it
    address: "",
    status: "ACTIVE"
}
const result = []
createObj = (item,value) => {
           const temp = { }
            temp["field"] = item
            temp["value"] =  value
            temp["operator"] = "equal"
            result.push(temp)
}

Object.keys(x).forEach(item => {

     if(x[item] && x[item] !== Infinity){
        if(Array.isArray(x[item])){
           
          x[item].forEach(record => {
            createObj(item, record)
          })
          
     } else {
           createObj(item, x[item])
        }
    
     }
     
})

console.log(result)

【讨论】:

  • 和我的代码非常相似,我们有相似的想法:)
  • 确实如此,开发者也这么认为。
【解决方案2】:
  • 初始化一个空数组
  • 首先从对象中获取密钥。
  • 循环你的键并使用键检查对象的值是否为数组,如果是数组,则循环并推入数组。
  • 如果值不是数组,同样的东西只需使用您的架构格式推入数组。

下面的代码已经过测试。

var sample = {
      _groups: ["d1830f7c-12ac-4abf-bc03-f0b70e26f8f2", "d0348b51-dcaa-2227-f0ff-912b27100aee"],
      _eror: "",
      number: "",
      seen_days: Infinity,
      address: "",
      status: "ACTIVE"
    }

let targetArray = [];
const keys = Object.keys(sample)
  .filter(v => !!sample[v] && sample[v] !== Infinity);

keys.forEach(key => {
  if (Array.isArray(sample[key])) {
    sample[key].forEach((sampleKey => {
      targetArray.push({
        field: key,
        value: sampleKey,
        operator: "equal"
      })
    }))
  } else {
    targetArray.push(
      {
        field: key,
        value: sample[key],
        operator: "equal"
      }
    )
  }
})


console.log(targetArray)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多