Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在迭代时设置对象的属性_Javascript_Jquery_Vue.js - Fatal编程技术网

Javascript 在迭代时设置对象的属性

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",

我正在用Laravel(后端)和Vue.js做水疗。我有以下阵列:

访问阵列:

["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 function
Array.forEach
.yes@KonradKalemba,只需更正所使用的逻辑,简单映射或forEach在本例中起作用。因此,如果jquery在他的应用程序中的其他位置使用,并且jquery在这个问题中也被标记,那么您可以使用这个选项:)@KonradKalemba,使用forEach for循环添加了选项2,而不使用jqueryah,我的错。我没有看到
jQuery
标记。