[英]How can I set array as a key value in javascript object?
我正在嘗試使用javascript將數組設置為JSON對象中的鍵值。
當我設置數組值時
console.log(obj [“ likes”])顯示大小為1的數組。
但在下一行console.log(obj)顯示Likes鍵是大小為0的數組。
我有一個有關帖子信息的JSON對象。
如果帖子中不存在喜歡的對象,則該字段在該帖子的對象中不存在。
我正在嘗試實現一個不喜歡的更新功能,該功能用於檢查用戶是否喜歡帖子。
如果他還沒有,那么我將他的用戶名附加到喜歡的數組中,否則我將刪除他的用戶名。
userID是我在腳本標記開頭定義的全局變量。
如果我設置一個新的字符串而不是userID,那么它將起作用:
obj["likes"] = ["XX"]
這也可以工作(我得到一個額外的空間,但至少可以正確記錄日志):
obj["likes"] = [userId+" "]
console.log(obj["likes"])
console.log("Obj:",obj)
但是,然后再做一次是行不通的!!!!
let arr = [" "+userId]
console.log(arr)
arr[0] = arr[0].trim()
console.log(arr)
obj["likes"] = arr
console.log("Obj:",obj)
function saveLikeDislike(url, action) {
for (i = 0; i < crawledUrlsData.length; i += 1) {
if (typeof crawledUrlsData[i] === "object") {
var obj = crawledUrlsData[i]
if (url === obj["url"]) {
if (action === "like") {
if ("likes" in obj) {
likes = obj["likes"]
if (likes.includes(userId)) {
likes = likes.filter(id => id != userId)
} else {
likes.push(userId)
}
obj["likes"] = likes
} else {
var id = window.userId
console.log(userId)
obj["likes"] = [id]
console.log(obj["likes"])
console.log("Obj:",obj)
}
if ("dislikes" in obj) {
var dislikes = obj["dislikes"]
if (dislikes.includes(userId)) {
dislikes = dislikes.filter(id => id != userId)
obj["dislikes"] = dislikes
}
}
} else {
if ("dislikes" in obj) {
dislikes = obj["dislikes"]
if (dislikes.includes(userId)) {
dislikes = dislikes.filter(id => id != userId)
} else {
dislikes.push(userId)
}
obj["dislikes"] = dislikes
} else
obj["dislikes"] = [dislikes]
}
if ("likes" in obj) {
var likes = obj["likes"]
if (likes.includes(userId)) {
likes = likes.filter(id => id != userId)
obj["likes"] = likes
}
}
}
crawledUrlsData[i] = obj
console.log(obj["likes"])
renderData()
return
}
}
}
兩個問題。 1.提到usrId-userId錯字。 2.此行:
likes = likes.push(userId)
likes.push(something)
的輸出是一個數字,即推送后數組的長度。 該行總計為likes = 1
。 改為:
likes.push(userId)
push
返回數組的新長度-所以這一行:
likes = likes.push(userId);
將是數字,而不是數組-刪除分配:
likes.push(userId);
原來我錯過了括號。
但這仍然不能解釋在訪問userId時在一行上設置鍵值而在下一行中console.log輸出不同的奇怪行為,但是如果以某種方式修改了userId則正確。
無論如何,這是固定功能:
function saveLikeDislike(url, action) {
for (i = 0; i < crawledUrlsData.length; i += 1) {
if (typeof crawledUrlsData[i] === "object" && crawledUrlsData[i]["url"] == url) {
var obj = crawledUrlsData[i]
if (url === obj["url"]) {
if (action === "like") {
if ("likes" in obj) {
console.log("likes in obj")
likes = obj["likes"]
if (likes.includes(userId)) {
likes = likes.filter(id => id != userId)
} else {
likes.push(userId)
}
obj["likes"] = likes
} else {
obj.likes = [userId]
console.log("Obj:",obj)
}
if ("dislikes" in obj) {
var dislikes = obj["dislikes"]
console.log("Dislikes: ",dislikes)
if (dislikes.includes(userId)) {
dislikes = dislikes.filter(id => id != userId)
obj["dislikes"] = dislikes
}
}
} else if (action === "dislike"){
if ("dislikes" in obj) {
dislikes = obj["dislikes"]
if (dislikes.includes(userId)) {
dislikes = dislikes.filter(id => id != userId)
} else {
dislikes.push(userId)
}
obj["dislikes"] = dislikes
} else {
obj["dislikes"] = [userId]
}
if ("likes" in obj) {
var likes = obj["likes"]
console.log("ID: ",userId)
if (likes.includes(userId)) {
likes = likes.filter(id => id != userId)
obj["likes"] = likes
}
}
}
}
crawledUrlsData[i] = obj
linkTreeRef.set(crawledUrlsData)
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.