2017-09-25 15 views
0

私のプロジェクトの1つで、JavaScriptに対してeslintを実行しています。今日では、私に言った:`query [name_value [0]] = name_value [1];で配列destruturingとは何ですか?

error: Use array destructuring

問題のコードは次のようになります。

query[name_value[0]] = name_value[1]; 

私はこのようになります別のステートメントがあります。

query[name_value[0]] = true; 

をそして、私はエラーを取得しませんそれで、の崩壊が右側に起こっているように見えます。

array or object desstructuringに関するドキュメントを確認したところ、が間違っているとわかりません。です。

コンプリート機能、念のため:

var query = null; 

function get_query_string(name) 
{ 
    var url, 
     location_query, 
     query_array, 
     idx, 
     name_value; 

    if(null === query) 
    { 
     url = String(window.location.href); 
     location_query = url.split("?", 2); 
     query_array = 2 == location_query.length 
         ? location_query[1].split("&") 
         : []; 

     query = {}; 

     for(idx in query_array) 
     { 
      if(Object.prototype.hasOwnProperty.call(query_array, idx)) 
      { 
       name_value = query_array[idx].split("=", 2); 
       if(2 === name_value.length) 
       { 
        query[name_value[0]] = name_value[1]; // offensive line 
       } 
       else 
       { 
        query[name_value[0]] = true; 
       } 
      } 
     } 
    } 

    return query[name]; 
} 

更新

私は今、(少なくともFirefoxで)それが正しく動作していて、私はちょうどにqueryのタイプを変更オブジェクトとトップのテストも変更する必要がありました。それは、破壊についての誤りが起こるという事実を変えるものではありません。

+1

を「エラー」を削除(ただし、エラーが厳しいようだ!)すべきであると考えています –

+0

@JaromandaX完全な機能を追加しました。私は、この問題を説明するために追加のコード行が必要かどうかはわかりませんが、とにかくここにあります。 –

+1

それはeslintが '' [key、value] = name_value = query_array [idx] .split( "="、2); 'を書くことを期待しているのですが、' 'query [key] = value;' '奇数 –

答えて

1

私はそれが周囲のコードに依存します*あなたが持っていないと思います*私はこの変更が

 if(Object.prototype.hasOwnProperty.call(query_array, idx)) 
     { 
      let [key, value] = query_array[idx].split("=", 2); 
      if(value !== undefined) 
      { 
       query[key] = value; 
      } 
      else 
      { 
       query[key] = true; 
      } 
     } 

あるいは

 if(Object.prototype.hasOwnProperty.call(query_array, idx)) 
     { 
      let [key, value] = query_array[idx].split("=", 2); 
      query[key] = value === undefined ? true : value; 
     } 
+0

さて、私がコメントで述べたように、 'let ...'命令は私がまだ避けようとしているES6の機能です。しかし、構文はES6の機能を許可すると機能します。今では、なぜ彼らは物事を破壊するのが普通の方法よりも優れていると思うのだろうと思っています... –

+1

代わりにvarを使うことができます。そして、 '[key、value] = ...' –

関連する問題