簡體   English   中英

如何在JavaScript對象中將數組設置為鍵值?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM