Javascript 使用Object.entries循环对象
我有一个comobox组件来显示API请求中的标记。组件以以下格式接收标记作为道具:Javascript 使用Object.entries循环对象,javascript,vue.js,vuetify.js,Javascript,Vue.js,Vuetify.js,我有一个comobox组件来显示API请求中的标记。组件以以下格式接收标记作为道具: "tags": [ { "name": "Rejected" }, { "name": "Accepted" } ] } 我试图获取值name,并将其设置为v-model,以显示保存在DB中的标记,并在用户需要更新时保留新标记。以下是框代码: 没有与“{{search}}匹配的结果。按enter键创建一个新的
"tags": [ { "name": "Rejected" }, { "name": "Accepted" } ] }
我试图获取值name
,并将其设置为v-model
,以显示保存在DB中的标记,并在用户需要更新时保留新标记。以下是框代码:
没有与“{{search}}匹配的结果。按enter键创建一个新的
道具
计算
computed: {
model() {
return Object.entries(this.value.tags).forEach(([key,value]) => {
return this.model = value
})
}
},
当我尝试使用Object.entries
获取值时,问题是:
TypeError:无法将未定义或null转换为对象
错误
无法将undefined或null转换为object
错误表明此.value.tags在计算时尚未定义。在提供值之前,计算的道具在初始化时运行。一种解决方案是在包含初始标记的prop声明中指定默认值:
导出默认值{
道具:{
价值:{
默认值:()=>({tags:[]})
}
}
}
从标记中提取值
如果我理解正确,您正在尝试将tags[]
中的name
值映射到数组中。您可以通过以下方式执行此操作:
导出默认值{
计算:{
模型(){
//从`tags[]中的每个对象获取`name`属性`
返回此.value.tags.map(({name})=>name)
}
}
}
绑定到计算属性
我注意到您正在将模型
计算属性绑定到
中,但是v-model
需要可写属性,而模型
不需要。您应该会在开发模式中看到一个控制台警告
我认为模型
应该是项目
。用户选择的值将存储在v-model
中,因此这应该是组件的数据()中声明的某些属性:
导出默认值{
数据(){
返回{
selectedItems:[]
}
},
计算:{
模型(){/*…*/}
}
}
forEach
中的return语句无效tags
包含一个数组,因此Object.entries()
将产生意外结果。不管这些,显然,这个.value.tags
是未定义的
或空的
。在控制台中键入此项并观察其工作情况:Object.entries({name:'test',number:42})
那么如何对未定义或空类型进行forEach?嗯……您不能forEach()
是JavaScript中数组对象(以及其他类似数组的对象)的方法。这意味着您需要从有效的数组对象调用它。空对象仍然是对象,因此[].forEach(console.log)
可以工作,但由于没有可迭代的内容,所以什么都不做。你是说这个问题没有解决方案吗?
computed: {
model() {
return Object.entries(this.value.tags).forEach(([key,value]) => {
return this.model = value
})
}
},