[英]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.