【发布时间】:2019-04-07 10:09:33
【问题描述】:
我正在尝试使用 javascript 将数组设置为 JSON 对象中的键值。
当我设置数组值时,
console.log(obj["likes"]) 显示大小为 1 的数组。
但在下一行 console.log(obj) 显示 likes 键是一个大小为 0 的数组。
我有一个 JSON 对象,其中包含有关帖子的信息。
如果帖子中不存在点赞,则该帖子的对象中不存在该字段。
我正在尝试实现一个喜欢-不喜欢的更新功能,我可以在其中检查用户是否喜欢某个帖子。
如果他没有,那么我将他的用户名附加到喜欢的数组中,否则我删除他的用户名。
userID 是我在脚本标记开头定义的全局变量。
如果我设置一个新字符串而不是用户 ID,它会起作用:
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
}
}
}
【问题讨论】:
-
是的。是一个错字。查看我最近的编辑...
-
我只看了你说的“但是再做一次没有用!!!!”..我复制并粘贴了该代码,它按预期工作......最终的 obj 是数组数组,如下所示:obj["likes"][0]。所以你可以检查一下 obj["likes"][0] === arr[0] 是真的
标签: javascript html arrays json