Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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 筛选器方法,并且对象通过ref传递_Javascript - Fatal编程技术网

Javascript 筛选器方法,并且对象通过ref传递

Javascript 筛选器方法,并且对象通过ref传递,javascript,Javascript,如何在不更改“list”变量的情况下执行以下操作?据我从docs()中了解,filter方法应该返回一个新的变量,但下面告诉我,它只是一个引用,因为“list”变量发生了变化? 有人能解释这个行为以及如何绕过它吗(不想更改原始的“列表”变量) var list=[{topic:“fussball”,arr:[1,2]},{topic:“soccer”,arr:[3,4]}, {主题:“足球”,arr:[5,6]},{主题:“足球”,arr:[7,8]}]; 函数someFilterMethod

如何在不更改“list”变量的情况下执行以下操作?据我从docs()中了解,filter方法应该返回一个新的变量,但下面告诉我,它只是一个引用,因为“list”变量发生了变化? 有人能解释这个行为以及如何绕过它吗(不想更改原始的“列表”变量)

var list=[{topic:“fussball”,arr:[1,2]},{topic:“soccer”,arr:[3,4]},
{主题:“足球”,arr:[5,6]},{主题:“足球”,arr:[7,8]}];
函数someFilterMethod(列表、主题){
设tops=list.filter(函数(obj){
if(obj.topic==主题){
返回obj;}
});
for(设i=0;i//>数组[Object{topic:“fussball”,arr:Array[1,2,5,6]},Object{topic:“soccer”,arr:Array[3,4]},Object{topic:“fussball”,arr:Array[5,6]},Object{topic:“socket”,arr:Array[7,8]},Object{topic:“hockey”,arr:arl[9,10]},Object{topic:“golf”,arr:arr:arl[11,12]},Object{topic:“曲棍球”,arr:arr:Array[13,14]},对象{topic:“golf”,arr:Array[15,16]}]
您需要解析并strigify json,否则它将修改现有对象

var list=[{topic:“fussball”,arr:[1,2]},{topic:“soccer”,arr:[3,4]},
{主题:“足球”,arr:[5,6]},{主题:“足球”,arr:[7,8]}];
函数someFilterMethod(列表、主题){
让tops=JSON.parse(JSON.stringify(list)).filter(函数(obj){
if(obj.topic==主题){
返回obj;}
});
for(设i=0;i//>数组[Object{topic:“fussball”,arr:Array[1,2,5,6]},Object{topic:“soccer”,arr:Array[3,4]},Object{topic:“fussball”,arr:Array[5,6]},Object{topic:“socket”,arr:Array[7,8]},Object{topic:“hockey”,arr:arl[9,10]},Object{topic:“golf”,arr:arr:arl[11,12]},Object{topic:“曲棍球”,arr:arr:Array[13,14]},对象{topic:“golf”,arr:Array[15,16]}]
您需要解析并strigify json,否则它将修改现有对象

var list=[{topic:“fussball”,arr:[1,2]},{topic:“soccer”,arr:[3,4]},
{主题:“足球”,arr:[5,6]},{主题:“足球”,arr:[7,8]}];
函数someFilterMethod(列表、主题){
让tops=JSON.parse(JSON.stringify(list)).filter(函数(obj){
if(obj.topic==主题){
返回obj;}
});
for(设i=0;i//>数组[Object{topic:“fussball”,arr:Array[1,2,5,6]},Object{topic:“soccer”,arr:Array[3,4]},Object{topic:“fussball”,arr:Array[5,6]},Object{topic:“socket”,arr:Array[7,8]},Object{topic:“hockey”,arr:arl[9,10]},Object{topic:“golf”,arr:arr:arl[11,12]},Object{topic:“曲棍球”,arr:arr:Array[13,14]},Object{topic:“golf”,arr:Array[15,16]}]
使用Array.filters,将创建数组的新引用,但是,对象将继续共享相同的引用。因此,对过滤数组的对象的任何更改都将意味着对原始数组的更改

你可以试试下面的

var list=[{主题:“足球”,arr:[1,2]},{主题:“足球”,arr:[3,4]},{主题:“足球”,arr:[5,6]},{主题:“足球”,arr:[7,8]}];
函数someFilterMethod(列表、主题){
返回列表。减少((a,c)=>{
如果(c.topic==topic)a.arr=[…a.arr,…c.arr];
返回a;
},{主题,arr:[]});
}
var a=某些筛选方法(列表,“fussball”);
控制台日志(a);

console.log(list);
使用Array.filters,将创建数组的新引用,但是,对象将继续共享同一引用。因此,对过滤数组的对象的任何更改都将意味着对原始数组的更改

你可以试试下面的

var list=[{主题:“足球”,arr:[1,2]},{主题:“足球”,arr:[3,4]},{主题:“足球”,arr:[5,6]},{主题:“足球”,arr:[7,8]}];
函数someFilterMethod(列表、主题){
返回列表。减少((a,c)=>{
如果(c.topic==topic)a.arr=[…a.arr,…c.arr];
返回a;
},{主题,arr:[]});
}
var a=某些筛选方法(列表,“fussball”);
控制台日志(a);

console.log(列表)
你想要实现什么?清楚地提到你的预期输出你想要实现什么?清楚地提到你的预期输出Hanks!!@Akhil为什么?它会创建一个新的对象并删除引用吗?这是对象属性的“引用”所要求的。例如:D;如果你认为我的答案是正确的,请将它标记为正确,小心,伙计。谢谢!!@Akhil这是为什么?它会创建一个新对象并删除ref吗?这是对象属性“reference”的要求,类似于:D;如果你认为我的答案是正确的,请将其标记为正确,小心点,伙计。