如何在JavaScript对象中将数组设置为键值?

塔曼·帕纳(Parth Tamane)

我正在尝试使用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
                }
        }
    }

控制台输出

塔曼·帕纳(Parth Tamane)

原来我错过了括号。

但这仍然不能解释在访问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)
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在JavaScript中将对象{}转换为键值对的数组[]

如何在JavaScript中将对象{}转换为键值对的数组[]

如何在javascript中设置数组对象的键值?

如何在React中将状态设置为对象数组

如何在 JavaScript 中将嵌套对象数组转换为具有键值对的对象

如何在Angular中将值设置为键值对属性?

如何在php中将对象数组转换为键值对

如何在Javascript / Jquery中将键值对添加到数组

如何在 JavaScript 中将数组元素的值设置为它们在数组中的位置

JavaScript:如何在addEventListener函数中将父对象设置为参数?

如何在JavaScript中将对象的所有值设置为null?

如何在Javascript / AngularJS中将foo动态设置为等于对象属性名称?

通过将键值设置为对象的属性之一来修改JavaScript中的对象数组

我如何在php中将数组排序为具有键值的数组

如何在javascript / node js中将数组键设置为索引

如何在ReactJS中将对象值数组映射到键值数组?

如何在 JavaScript 中克隆对象数组但将新数组的值设置为 null

如何在JavaScript中将对象数组过滤为另一个对象数组?

如何在Java中将时间设置为日期对象

如何在soapUI中将json对象的值设置为Request

如何在Rails中将新变量设置为activerecord对象

如何在Golang中将数组文档设置为Redis?

如何在PHP中将数组的索引值设置为0?

如何在 Python 中将数组条目设置为零

如何在C中将数组的一维设置为零

如何在 Firestore 中将多个数据设置为数组

如何在JavaScript中将数组对象更改为嵌套对象

如何在JavaScript中将对象数组转换为对象?

如何在ES6中将键值对对象转换为值数组?