【问题标题】:Why do I only get 1-dimensional arrays?为什么我只得到一维数组?
【发布时间】:2017-06-26 05:33:07
【问题描述】:

    var $arr = {
      field_hide : '',
      field_values: '',
      field_triggers: {}
    }

    function setTrigger ($trigger, $values, $show, $arr)  {
      $arr.field_hide += $show + ',';
      $arr.field_values += $values + ',';
      $arr.field_triggers[$trigger] = [];   
      $arr.field_triggers[$trigger].push([$values, $show]);
      return $arr;
    }

    $arr = setTrigger('file_drive','local','local_key,local_duk',$arr);
    $arr = setTrigger('file_drive','cloud','cloud_key,cloud_duk',$arr);
    console.log($arr)

为什么我只得到一维数组?谁能帮我解决这个问题? 我想要的结果如下:

{
 "field_hide": "local_key,local_duk,cloud_key,cloud_duk,",
 "field_values": "local,cloud,",
 "field_triggers": {
  "file_drive": [
    ["local","local_key,local_duk"],
    ["cloud","cloud_key,cloud_duk"]
   ]
 }
}

【问题讨论】:

  • 您的问题写得很好,但您需要将标题编辑为更具体(且可搜索)。我会使用类似“为什么我只得到一维数组?”之类的东西。您的第一个 sn-p 也很好(当人们将代码放入适当的 sn-p 时喜欢它),但第二个应该是一个简单的代码块(因为它不是可运行的代码)。只是一些友好的提示,因为你是新手 :)

标签: javascript node.js


【解决方案1】:

您每次都使用此行将数组设置为空数组:

$arr.field_triggers[$trigger] = [];

相反,您需要检查数组是否已经定义,如下所示:

var $arr = {
    field_hide: '',
    field_values: '',
    field_triggers: {}
}

function setTrigger($trigger, $values, $show, $arr) {
    $arr.field_hide += $show + ',';
    $arr.field_values += $values + ',';

    if (!$arr.field_triggers[$trigger]) {
        $arr.field_triggers[$trigger] = [];
    }

    $arr.field_triggers[$trigger].push([$values, $show]);
    return $arr;
}

$arr = setTrigger('file_drive', 'local', 'local_key,local_duk', $arr);
$arr = setTrigger('file_drive', 'cloud', 'cloud_key,cloud_duk', $arr);
console.log($arr)

【讨论】:

  • 感谢您的建议和回答! ^_^
  • @mxh861001 不用担心:D
【解决方案2】:

这是因为您每次在使用$arr.field_triggers[$trigger] = []; 这一行添加新内容之前,都将file_drive 重置为一个空数组。您可以添加if 语句来确定是否创建新数组。

    var $arr = {
      field_hide : '',
      field_values: '',
      field_triggers: {}
    }

    function setTrigger ($trigger, $values, $show, $arr)  {
      $arr.field_hide += $show + ',';
      $arr.field_values += $values + ',';

      if (!$arr.field_triggers[$trigger]) {
        $arr.field_triggers[$trigger] = [];
      }

      $arr.field_triggers[$trigger].push([$values, $show]);
      return $arr;
    }

    $arr = setTrigger('file_drive','local','local_key,local_duk',$arr);
    $arr = setTrigger('file_drive','cloud','cloud_key,cloud_duk',$arr);
    console.log($arr)

【讨论】:

  • 感谢您的回答! ^_^
  • 没问题。我认为@Clonkex 击败了我提交按钮:D
【解决方案3】:

您每次都用空数组初始化$arr.field_triggers[$trigger] = [];,请使用下面的代码

var $arr = {
      field_hide : '',
      field_values: '',
      field_triggers: {$trigger:[]}
    };

    function setTrigger ($trigger, $values, $show, $arr)  {
      $arr.field_hide += $show + ',';
      $arr.field_values += $values + ',';
      $arr.field_triggers.$trigger.push([$values, $show]);
      return $arr;
    }

    $arr = setTrigger('file_drive','local','local_key,local_duk',$arr);
    $arr = setTrigger('file_drive','cloud','cloud_key,cloud_duk',$arr);
    console.log($arr)

【讨论】:

  • 前提是正确的,但提供的解决方案是不正确的。 $arr.field_triggers.$trigger.push([$values, $show]); 不像你想的那样工作;它创建了一个名为“$trigger”的属性,而不是使用$trigger 变量的内容。
  • 我在初始化 $arr 对象 field_triggers 时定义了这个数组:{$trigger:[]}
  • 是的,但这也不正确。 OP 不想要一个名为“$trigger”的数组,他想要一个名为$trigger 变量内容的数组(这是setTrigger 函数的参数),在他的示例中为file_drive。将运行您的答案的 sn-p 的结果与我的答案的 sn-p 的结果进行比较,您就会明白我的意思了。
猜你喜欢
  • 2020-10-22
  • 2018-07-13
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 2011-02-22
  • 2018-10-25
相关资源
最近更新 更多