Javascript 在迭代时设置对象的属性
我正在用Laravel(后端)和Vue.js做水疗。我有以下阵列: 访问阵列:Javascript 在迭代时设置对象的属性,javascript,jquery,vue.js,Javascript,Jquery,Vue.js,我正在用Laravel(后端)和Vue.js做水疗。我有以下阵列: 访问阵列: ["BIU","CEO","Finance","HRD","Group"] 访问: ["BIU","Group"] 我想将access数组与accessArray数组进行比较,如果存在更改记录的匹配项(在accessArray中),则添加true值,否则添加false值。我是在Vue方法中执行此操作的 。。。到目前为止,我得到了这个: var foo = ["BIU","CEO","Finance","HRD",
["BIU","CEO","Finance","HRD","Group"]
访问:
["BIU","Group"]
我想将access
数组与accessArray
数组进行比较,如果存在更改记录的匹配项(在accessArray
中),则添加true
值,否则添加false
值。我是在Vue方法中执行此操作的
。。。到目前为止,我得到了这个:
var foo = ["BIU","CEO","Finance","HRD","Group"];
var bar = ["BIU","Group"];
$.each(bar, function (key, value) {
if ($.inArray(value, foo) != -1) {
var position = $.inArray(value, foo);
console.log(value + ' is in the array. In position ' + position);
foo[position] = {name: value, checked: true};
}
});
将其输出到控制台:
BIU is in the array. In position 0
Group is in the array. In position 4
在Vue中:
[
{"name":"BIU","checked":true},
"CEO",
"Finance",
"HRD",
{"name":"Group","checked":true}
]
我希望实现的输出如下:
[
{"name":"BIU","checked":true},
{"name":"CEO","checked":false},
{"name":"Finance","checked":false},
{"name":"HRD","checked":false},
{"name":"Group","checked":true}
]
任何帮助都将不胜感激,我已经研究了许多类似的问题,但似乎找不到任何类似的线索。我还尝试在末尾添加一个else语句,但我(认为)我正在将其转换为一个对象,因此这似乎不起作用
编辑:
foo中的数据来自Laravel配置设置,因此有点动态
条形图中的数据是从Laravel ORM接收的JSON(其JSON存储在文本字段中)使用
reduce
并在reduce回调中检查项目是否同时存在于accessArray
和access
中。创建一个对象,两个数组中的项都将checked
的值设置为true或false
让arr1=[“BIU”、“CEO”、“财务”、“HRD”、“集团”]
设arr2=[“BIU”,“Group”];
设k=arr1.reduce(函数(acc,curr){
设obj={}
如果(包括(货币)){
obj.name=curr;
obj.checked=true
}否则{
obj.name=curr;
obj.checked=false
}
加速推力(obj);
返回acc;
}, []);
console.log(k)
要获得预期结果,请使用下面的选项1.循环foo数组
2.删除初始if条件-“if($.inArray(value,foo)!=-1)”以循环所有
3.对选中的进行条件检查-选中:$.inArray(值,条)!=-1.对:错 代码笔-
var foo=[“BIU”、“CEO”、“财务”、“HRD”、“集团”];
变量条=[“BIU”,“组”];
$.each(foo,函数(键,值){
foo[key]={name:value,选中:$.inArray(value,bar)!==-1?true:false};
});
console.log(foo)代码>
带有香草javascript的选项:
var foo=[“BIU”、“CEO”、“财务”、“HRD”、“集团”];
变量条=[“BIU”,“组”];
var result=foo.map(name=>{
选中的变量=bar.indexOf(名称)!=-1
返回{name,checked}
})
console.log(result)
通过检查另一个数组中的值是否存在,您可以使用它来迭代该数组并构造一个新的数组
const accessArray=[“BIU”、“CEO”、“财务”、“HRD”、“集团”];
常量访问=[“BIU”,“组”];
const result=accessArray.map(a=>({name:a,checked:access.includes(a)}));
控制台日志(结果)
为什么返回{name,checked}
会导致一个包含键和值对的条目?你能提示一下与此相关的文档吗?@BennettDams这是ES6的简写-它是为了减少在编写类似{id:id,name:name}
之类的东西时的重复。真的不需要jQuery。用它来完成如此简单的任务是一种过分的做法。您可以使用vanilla JS functionArray.forEach
.yes@KonradKalemba,只需更正所使用的逻辑,简单映射或forEach在本例中起作用。因此,如果jquery在他的应用程序中的其他位置使用,并且jquery在这个问题中也被标记,那么您可以使用这个选项:)@KonradKalemba,使用forEach for循环添加了选项2,而不使用jqueryah,我的错。我没有看到jQuery
标记。