Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.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 .map()函数更新上一个变量_Javascript_Angular_Loops - Fatal编程技术网

Javascript .map()函数更新上一个变量

Javascript .map()函数更新上一个变量,javascript,angular,loops,Javascript,Angular,Loops,我想用checked:true作为逗号分隔的字符串来获取对象的值 var arr = [{ week_days: [ {name: 'Mo', value: 'Monday', checked: true}, {name: 'Tu', value: 'Tuesday', checked: true}, {name: 'We', value: 'Wednesday', checked: true}, {name: 'Th'

我想用checked:true作为逗号分隔的字符串来获取对象的值

  var arr = [{
    week_days: [
        {name: 'Mo', value: 'Monday', checked: true},
        {name: 'Tu', value: 'Tuesday', checked: true},
        {name: 'We', value: 'Wednesday', checked: true},
        {name: 'Th', value: 'Thursday', checked: true},
        {name: 'Fr', value: 'Friday', checked: true},
        {name: 'Sa', value: 'Saturday', checked: false},
        {name: 'Su', value: 'Sunday', checked: false}
     ],
    weekend_days: [
        {name: 'Mo', value: 'Monday', checked: false},
        {name: 'Tu', value: 'Tuesday', checked: false},
        {name: 'We', value: 'Wednesday', checked: false},
        {name: 'Th', value: 'Thursday', checked: false},
        {name: 'Fr', value: 'Friday', checked: false},
        {name: 'Sa', value: 'Saturday', checked: true},
        {name: 'Su', value: 'Sunday', checked: true}
     ]
    }];

    const newArr = arr;

    newArr.map((val)=>{
    let w = [];
    let we = [];
        val.week_days.map((val2)=>{
            if(val2.checked == true){
                w.push(val2.value);
            }
        })
        val.weekend_days.map((val3)=>{
            if(val3.checked == true){
                we.push(val3.value);
            }
        })
    val.week_days = w.join();
    val.weekend_days = we.join();
    })

    console.log(arr, newArr);
预期产量:/工作良好

newArr = [
   {
     week_days: "Monday,Tuesday,Wednesday,Thursday,Friday",
     weekend_days: "Saturday,Sunday"
   }
]
但问题是map也更新了arr

arr应与之前相同

意外输出:

arr = [
       {
         week_days: "Monday,Tuesday,Wednesday,Thursday,Friday",
         weekend_days: "Saturday,Sunday"
       }
    ]

@Jornsharpe已经告诉你了它不起作用的原因。尽管如此,我还是想建议一个没有副作用的更具可读性的解决方案

常数arr=[{ 星期日:[ {name:'Mo',value:'Monday',checked:true}, {name:'Tu',value:'sunday',checked:true}, {name:'We',value:'星期三',checked:true}, {name:'Th',value:'striday',checked:true}, {name:'Fr',value:'Friday',checked:true}, {name:'Sa',value:'Saturday',checked:false}, {名称:'Su',值:'Sunday',选中:false} ], 周末(星期日)[ {name:'Mo',value:'Monday',checked:false}, {name:'Tu',value:'sunday',checked:false}, {name:'We',value:'星期三',checked:false}, {name:'Th',value:'striday',checked:false}, {name:'Fr',value:'Friday',checked:false}, {name:'Sa',value:'Saturday',选中:true}, {名称:'Su',值:'Sunday',选中:true} ] }]; const result=arr.mapval=>{ 返回{ 星期天:val.week\u days.filterx=>x.checked.mapx=>x.value.join,, 周末:val.weekend\u days.filterx=>x.checked.mapx=>x.value.join, } };
console.logresult;newArr=arr不创建副本。此外,如果您要忽略它创建的新数组,并且仅将其用于副作用,则不应使用map;使用forEach。很抱歉问一下,为什么newArr=arr不创建一个副本呢?是的,请注意,我也说过-从map切换到forEach不会改变arr和newArr是同一个对象的单独事实。提取模型不是很理想。这可以通过其他方式实现。也就是说,请查看以了解为什么原始阵列也会被修改。创建深度副本的一种快速方法是newArr=JSON.parseJSON.stringifyarr@najamusaqib:我不确定您是否是一般编程新手。如果你不清楚通过值传递还是通过引用传递,那么很多好的文章只需要谷歌搜索就可以了。搜索“按值传递”与“按引用传递”。