0

私の本の定義は、メソッドが呼び出された配列の各要素を指定した関数に渡し、その関数によって返された値を含む新しい配列を返すというものです。

a = [1,2,3]
a.map(function(x) { return x*x; }); // b is [1,4,9]

4 が見つからない場合、関数は 1 のみを返すようにしたいと思います。

ケースは

var bool = false;
a.map(function(x) {

if (x == 4){
  bool = true;
}

return x;
}).filter(function(x) {if( (x == 1) && ( bool = true)){ return null}});

私がそれを使用したい方法は、配列を反復処理し、最後にマップを動的に変更することです。どうすればいいですか?

私の問題は文字列に関するものなので、1 が不明と呼ばれる別のケースを次に示します。また、「不明」以降が見つかった場合は、参加する前に「不明」をリストから削除してください。

 var wordList = [];
    var newSource = false;
    str = results[i].Meaning.map(function(m){
        count++;

        if ((!m.Source && !contains(wordList, "unknown"))) {
            wordList[count] = "unknown";
            return "unknown";
            }
        if (!m.Source ) {
            return m.Source;
        }

            if ( contains(wordList, "unknown") ) {
                newSource = true;
            }
            if (!contains(wordList, m.Source) ) {
                wordList[count] = m.Source;
                return m.Source;
            }

    }).filter(function(x) { return x  }).filter(function(x){
        if (newSource == true ) { return (x != "unknown")}}).join(', ');
4

1 に答える 1

2

最初の関数を見てみましょう:

function f1(x) {
  var bool = false;

  if (x == 4){
    bool = true; 
  }

  return x;
}

この関数は変数boolをローカルに変更し、 を返しますx。したがって、 に何が起こっても、この関数は恒等関数boolと同等です。

function(x) { return x; }

すべての要素に適用され.map(f)た配列を返すため、は と等価であり、 は と等価です。fa.map(f1)a.map(identity function)a

2 番目の関数はフィルター内にあります。

if( (x == 1) && ( bool = true)) return null;

ここにはいくつかの問題があります。

  • function(x)サインがない
  • bool最初の関数で宣言された変数にアクセスしようとしています。

mapandを使用するときはいつでも、純粋な関数filterを使用することをお勧めします。つまり、関数は渡されたパラメーターを処理し、結果を返すだけです。

最初の問題で何を達成しようとしているのかわかりません。詳細をお知らせください。解決のお手伝いをさせていただきます。

Google で map、filter、reduce のチュートリアルを探してください。たとえば、このエッグヘッド ビデオ.

于 2015-02-11T17:12:49.317 に答える