【问题标题】:JS - Check item exist before Pushing in ArrayJS - 在推入数组之前检查项目是否存在
【发布时间】:2021-08-23 16:52:46
【问题描述】:

我已对 JSON 结构化 键值 对数据进行了无格式设置。我需要对其进行格式化并将其返回到另一个格式化的结构化.so中,

示例代码::

// Unformatted data like this, which contains repeating keys

  let query = {
    "junk,fruit,vegetable,junk,fruit": "pizza,apple,potato,burger,mango"
  }


// formatting like this,
const keys = Object.keys(query)[0].split(",");
const values = Object.values(query)[0].split(",");

const newObj = {}

for (let i = 0; i < keys.length; i++) {
   newObj[keys[i]] = values[i]
}

console.log(newObj)

//[ junk:pizza and fruit:apple are not returned in console]

//Output:
// {junk:  'burger',
// fruit: 'mango',
// vegetable: 'potato'}

JSON,不允许重复键,这就是它不返回的原因。这就是我试图在另一个结构中返回它的原因。

为此,如果 key 重复,则将其 value 推送到 same data of array 中,如预期输出所示。

newObj.includes('junk')newObj.includes('mango'),通过它,可以检查该特定 key 是否已出现在输出中或数组中。

我想像这样返回我的输出:

{
    'junk': {
     'data': [
       'pizza', 
       'burger'
      ]
    }, 
    'fruit': {
     'data': [
       'apple',
       'mango'
     ]
    },
    'vegetable': {
     'data': [
        'potato'
      ]
    }
}        

JSFiddle 链接: https://jsfiddle.net/sophia22134/0yLxowt4/

【问题讨论】:

    标签: javascript arrays json formatting


    【解决方案1】:

    这可能会有所帮助

    If(keyArray.indexOd(i) == -1) { valueArray.push(i) }
    

    或者只是需要更新

    const newValueKey = {};
    
    for (let i = 0; i < keys.length; i++) {
      if (!newValueKey[keys[i]]) newValueKey[keys[i]] = { data: [] };
      newValueKey[keys[i]].data.push(values[i]);
    }
    

    【讨论】:

      【解决方案2】:

      只需要有条件地将值分配为数组或将其与现有值连接,具体取决于键上的值是否存在。

      为简单起见,如果键只包含一个字符串数组,则无需将其嵌套到另一个对象中:newObj.fuits={data:[...]} 应该是 newObj.fruits=[...]

      // Unformatted data like this, which contains repeating keys
      
        let query = {
          "junk,fruit,vegetable,junk,fruit": "pizza,apple,potato,burger,mango"
        }
      
      
      // formatting like this,
      const keys = Object.keys(query)[0].split(",");
      const values = Object.values(query)[0].split(",");
      
      const newObj = {}
      
      for (let i = 0; i < keys.length; i++) {
         let key=keys[i]
         let value=values[i]
         newObj[key] = newObj[key] ? [...newObj[key],value] : [value]
      }
      
      console.log(newObj)
      
      /*
      {
        "junk": [
          "pizza",
          "burger"
        ],
        "fruit": [
          "apple",
          "mango"
        ],
        "vegetable": [
          "potato"
        ]
      }
      */

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-26
        • 1970-01-01
        • 2013-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多