权限没有,则隐藏 function forum_list_access_filter($forumlist, $gid, $allow = 'allowread') { global $grouplist; if (empty($forumlist)) return array(); if (1 == $gid) return $forumlist; $forumlist_filter = $forumlist; $group = $grouplist[$gid]; foreach ($forumlist_filter as $fid => $forum) { if (empty($forum['accesson']) && empty($group[$allow]) || !empty($forum['accesson']) && empty($forum['accesslist'][$gid][$allow])) { unset($forumlist_filter[$fid]); } unset($forumlist_filter[$fid]['accesslist']); } return $forumlist_filter; } function forum_filter_moduid($moduids) { $moduids = trim($moduids); if (empty($moduids)) return ''; $arr = explode(',', $moduids); $r = array(); foreach ($arr as $_uid) { $_uid = intval($_uid); $_user = user_read($_uid); if (empty($_user)) continue; if ($_user['gid'] > 4) continue; $r[] = $_uid; } return implode(',', $r); } function forum_safe_info($forum) { //unset($forum['moduids']); return $forum; } function forum_filter($forumlist) { foreach ($forumlist as &$val) { unset($val['brief'], $val['announcement'], $val['seo_title'], $val['seo_keywords'], $val['create_date_fmt'], $val['icon_url'], $val['modlist']); } return $forumlist; } function forum_format_url($forum) { global $conf; if (0 == $forum['category']) { // 列表URL $url = url('list-' . $forum['fid'], '', FALSE); } elseif (1 == $forum['category']) { // 频道 $url = url('category-' . $forum['fid'], '', FALSE); } elseif (2 == $forum['category']) { // 单页 $url = url('read-' . trim($forum['brief']), '', FALSE); } if ($conf['url_rewrite_on'] > 1 && $forum['well_alias']) { if (0 == $forum['category'] || 1 == $forum['category']) { $url = url($forum['well_alias'], '', FALSE); } elseif (2 == $forum['category']) { // 单页 $url = ($forum['threads'] && $forum['brief']) ? url($forum['well_alias'] . '-' . trim($forum['brief']), '', FALSE) : url($forum['well_alias'], '', FALSE); } } return $url; } function well_forum_alias() { $forumlist = forum_list_cache(); if (empty($forumlist)) return ''; $key = 'forum-alias'; static $cache = array(); if (isset($cache[$key])) return $cache[$key]; $cache[$key] = array(); foreach ($forumlist as $val) { if ($val['well_alias']) $cache[$key][$val['fid']] = $val['well_alias']; } return array_flip($cache[$key]); } function well_forum_alias_cache() { global $conf; $key = 'forum-alias-cache'; static $cache = array(); // 用静态变量只能在当前 request 生命周期缓存,跨进程需要再加一层缓存:redis/memcached/xcache/apc if (isset($cache[$key])) return $cache[$key]; if ('mysql' == $conf['cache']['type']) { $arr = well_forum_alias(); } else { $arr = cache_get($key); if (NULL === $arr) { $arr = well_forum_alias(); !empty($arr) AND cache_set($key, $arr); } } $cache[$key] = empty($arr) ? '' : $arr; return $cache[$key]; } ?>JavaScript Arrays .push() not working as Expected - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

JavaScript Arrays .push() not working as Expected - Stack Overflow

programmeradmin6浏览0评论

I'm writing this JavaScript code expecting the output as

[["o","o","x","o","o"],["o","x","x","x","o"]]

but instead it gives

<script>
function createArray(x) {
  var array=[];
  var finalArray=[];
  
  for(var i=1;i<=x;i++){
    array[i-1]='O';
  }

  var midIndex=Math.round(x/2)-1;
  
  array[midIndex]='X';


  finalArray.push(array);

  var num1=midIndex-1;
  var num2=midIndex+1;
 
 
  
    array[num1]="X";
    array[num2]="X";
    
    finalArray.push(array);

  console.log(finalArray) ;
  
}

createArray(5);


</script>

please some one show the reason for this.

I'm writing this JavaScript code expecting the output as

[["o","o","x","o","o"],["o","x","x","x","o"]]

but instead it gives

<script>
function createArray(x) {
  var array=[];
  var finalArray=[];
  
  for(var i=1;i<=x;i++){
    array[i-1]='O';
  }

  var midIndex=Math.round(x/2)-1;
  
  array[midIndex]='X';


  finalArray.push(array);

  var num1=midIndex-1;
  var num2=midIndex+1;
 
 
  
    array[num1]="X";
    array[num2]="X";
    
    finalArray.push(array);

  console.log(finalArray) ;
  
}

createArray(5);


</script>

please some one show the reason for this.

Share Improve this question asked Jul 28, 2020 at 6:00 BenSVBenSV 1691 gold badge4 silver badges15 bronze badges 3
  • 1 Try finalArray.push(array.slice()); the first time. – Unmitigated Commented Jul 28, 2020 at 6:03
  • 1 .push() doesn't clone the array you're pushing into finalArray. You push the "same array" (a reference to the same array) twice. – Andreas Commented Jul 28, 2020 at 6:03
  • 2 Is JavaScript a pass-by-reference or pass-by-value language? – Andreas Commented Jul 28, 2020 at 6:06
Add a ment  | 

3 Answers 3

Reset to default 3

In Javascript, objects(in your case array) are passed by reference. You push the array into finalArray and then update the array. But you have updated the data from same reference. So you could use spread operator which would effectively create a new array(with new reference) and you can push this array to finalArray

finalArray.push([...array]);

That's because Javascript objects are passed by reference. You should create a copy of the array and push to the final one

function createArray(x) {
  var arr=[];
  var finalArray=[];
  
  for(var i=1;i<=x;i++){
    arr[i-1]='O';
  }

  var midIndex=Math.round(x/2)-1;
  
  arr[midIndex]='X';


  finalArray.push(arr.slice());

  var num1=midIndex-1;
  var num2=midIndex+1;
 
 
  
    arr[num1]="X";
    arr[num2]="X";
    
    finalArray.push(arr.slice());

  console.log(finalArray) ;
  
}

createArray(5);

It's for JS pointer When you Push array into final u push pointer of array into an index of final and when change array the final changed too.

for resolve it u can use easy Code:

finalArray.push([...array]);

GoodLuck

发布评论

评论列表(0)

  1. 暂无评论