2017-03-13 7 views
0

これで3日間以上失われてしまいましたが、まだ成功していません。これはおそらく乾草の針を見つけるのが好きですが、私はまだこれを行う必要があります。オブジェクトの配列内のキーを見つけてRegexと一致させる必要があります

オブジェクトの配列内でキーを見つけようとしていて、(a)または(b)が含まれていれば、特定のキーをtrueに設定しています。

しかし、私はどこかで間違いを犯していますが、私はどこを知りません。ここで

は、私が今持っているものです。

let reg = /\((.+?)\)/; 
let aggregatedArray: Array<any> = []; 
const allWeeksDescription = this.selectedPlan.weeklyOffer; 
console.log(allWeeksDescription); 
let prop = 'description'; 
for (prop in allWeeksDescription) { 
    allWeeksDescription[prop].forEach(function(k:any) { 
      aggregatedArray.push(k.description); 
      console.log(aggregatedArray); 
    }) 
} 

はしかし、私は(ただし、私は成功した後console.loggedのですか)コンソールにこのエラーが表示されます。

元の例外:allWeeksDescription [小道具] .forEachは 機能

私はkey ('description')を見つけるするだけですものではなく、もしそれiの値RegExと一致する場合は、別のkey ('exists')trueに設定します。そうでない場合は、それをそのままにしてください - false。マッチングは、この変数に格納された正規表現で行われるべきである:コンソールで

let reg = /\((.+?)\)/; 

私はこのような何か受け取る:私はdescriptionkeysを取得し、Regexでそれらを一致させる必要があるという結論に

{ 
    monday: [ 
     { 
      description: "(a)", 
      exists: false 
     }, 
     { 
      description: "(a)", 
      exists: false 
     }, 
     { 
      description: "(a)", 
      exists: false 
     }, 
     { 
      description: "(a)", 
      exists: false 
     }, 
     { 
      description: "(a)", 
      exists: false 
     } 
     ] 
tuesday: [ 
     { 
      description: "test", 
      exists: false 
     }, 
     { 
      description: "test", 
      exists: false 
     }, 
     { 
      description: "test", 
      exists: false 
     }, 
     { 
      description: "test", 
      exists: false 
     }, 
     { 
      description: "test", 
      exists: false 
     } 
     ] 
    } 

を。一致する場合、key existsの値はtrueである必要があります。そうでなければ、それは今のままで残すべきです - false

私はこれを手伝ってください、私はこれ以上の多くの日を失ってしまった。

ありがとうございます。

+0

@Kinduser、こんにちはバディ。回答として完全な実例を投稿してください。ありがとう。 – tholo

+0

私は 'allWeeksDescription'オブジェクトが必要です(: –

+0

ああ申し訳ありませんが、私はここにいません..私は自宅にいます:(何かできるのですか?) – tholo

答えて

1

ここでは、匿名型オブジェクトに対してforeachループを実行する方法を示します。あなたがする必要があるのは、オブジェクトのすべてのキーを取得し、それらが同じ構造を持っていると仮定することによって、それらがパターンと一致することを保証する必要があります。

let reg = /\((.+?)\)/; 
 
let aggregatedArray = []; 
 
const allWeeksDescription = this.selectedPlan.weeklyOffer; 
 
console.log(allWeeksDescription); 
 
let prop = 'description'; 
 
Object.keys(allWeeksDescription).forEach(function(k) { 
 
    reg.match(allWeeksDescription[k]) && aggregatedArray.push(k.description); 
 
    console.log(aggregatedArray); 
 
})

+0

マッチングロジックを作成してください。ありがとう。 – tholo

+0

'allWeeksDescription'インデックスへの参照を保持するために同じ変数を使用すると、最初に' prop 'を' description 'に設定するのはなぜですか? :) – ValLeNain

+0

ああ私はそれを逃した。最初の場所で質問者がデータを提供していなかったので、最初のコードをテストできませんでした:) – AHBagheri

1

あなたのポストの下部に記述したオブジェクトがallWeeksDescriptionある場合は、にごforループを変更する必要があります。

let matchingDays = []; // to keep a track of matching days 
    for(let dayLabel in allWeeksDescription) { 
     /* This is one day (= an array), in your first object */ 
     let day = allWeeksDescription[dayLabel]; 
     /* Go through all of its elements */ 
     day.forEach(d => { 
     /* `d` is one element of the array */ 

     /* Check if it matches your regex */ 
     if(d.description.search(reg) !== -1) { 
      /* do whatever you want here, you know that the description matches your regex */ 
      d.exists = true; 
      matchingDays.push(day); 
     } 
     }); 
    } 
+0

Wait ..!==正規表現にマッチしました??それはどうですか? – tholo

+0

文字列がRegexと一致するかどうかを調べるこの関数(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search)を使用しています。 1つがあれば一致、そうでなければ-1)。 – ValLeNain

+0

これは初めて実装したのです。うまくいけば、あなたのソリューションはうまくいくでしょう。あなたはそれを完了してください、存在は "真"に設定されていますか?ありがとう。 – tholo

関連する問題