[英]JS - Check item exist before Pushing in Array
我没有格式化 JSON 结构化键值对数据。 我需要对其进行格式化并将其返回到另一种格式化的 structured.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,不允许重复键,这就是它不返回的原因。这就是为什么我试图在另一个结构中返回它。
为此,如果键重复,则将其value
推送到数组的相同数据中,如预期 Output 所示。
newObj.includes('junk')
或newObj.includes('mango')
,可以检查该特定键是否已存在于 output 中或是否存在于数组中。
我想退回我的Output:像这样
{
'junk': {
'data': [
'pizza',
'burger'
]
},
'fruit': {
'data': [
'apple',
'mango'
]
},
'vegetable': {
'data': [
'potato'
]
}
}
JSFiddle 链接: https://jsfiddle.net/sophia22134/0yLxowt4/
这可能有帮助
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]);
}
只需要有条件地将值分配为数组或将其与现有值连接,具体取决于键上的值是否存在。
为简单起见,如果键只包含一个字符串数组,则没有必要将其嵌套到另一个 object 中: 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" ] } */
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.