C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 多重配列のkey値指定の値を取りたい


(過去ログ 171 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■98379 / inTopicNo.1)  多重配列のkey値指定の値を取りたい
  
□投稿者/ センチ (1回)-(2021/11/10(Wed) 01:16:26)

分類:[JavaScript] 

こんにちは。
JavaScriptでこのような形で内部エラーメッセージを取りたいのですが、シンプルに取る方法はないでしょうか?
それとも階層を一つ一つ下階層がある場合、再起的に回さないとだめでしょうか?

お分かりになる方いましたら、宜しくお願いします。

let errors = [
	{
		"constraints": {
			"isLength": "name  is over 10" ←このメッセージだけ取りたい
		}
	},
	{
		"children": [
			{
				"children": [
					{
						"constraints": {
							"isLength": "title  is over 10"←このメッセージだけ取りたい
						}
					}
				]
			}
		]
	}
]



  this.buildError(errors);

  private buildError(errors) {
    const result = [];
    errors.forEach((el) => {
      const constraints = el.constraints ? el.constraints : el.children;
      Object.entries(constraints).forEach((constraint) => {
console.log("@@1:"+constraint);
        result.push(`${constraint[1]}`);
      });
    });
    return result;
  }

「constraints」内のKeyValue形式のValue値は固定ですが、階層数は可変になります。
↑の期待結果は["name  is over 10", "title is over 10"]

引用返信 編集キー/
■98381 / inTopicNo.2)  Re[1]: 多重配列のkey値指定の値を取りたい
□投稿者/ 魔界の仮面弁士 (3209回)-(2021/11/10(Wed) 10:29:36)
No98379 (センチ さん) に返信
> それとも階層を一つ一つ下階層がある場合、再起的に回さないとだめでしょうか?

提示されたコードだと、'[object Object]' という文字列が取り出されそうに見えました。
意図を理解できているのか自信がありませんが…とりあえず再帰的に書いてみます。


function buildError(errors) {
  const results = [];
  errors.forEach((el) => {
    if ( el.constraints !== void 0) {
      Object.entries(el.constraints).forEach(([key, value]) => results.push(value));
    } else {
      Array.prototype.push.apply(results, buildError(el.children))
    }
  });
  return results;
}

引用返信 編集キー/
■98382 / inTopicNo.3)  Re[2]: 多重配列のkey値指定の値を取りたい
□投稿者/ センチ (3回)-(2021/11/10(Wed) 10:43:34)
No98381 (魔界の仮面弁士 さん) に返信

ありがとうございます。
constraint[1]で固定で出力しているので取れているのは取れております。
再起的に取得は出来たのは以下で取れました。

private buildError(errors) {
const result = [];
errors.forEach((el) => {
const constraints = el.constraints ? el.constraints : this.buildError(el.children); ←子があれば再Call
Object.entries(constraints).forEach((constraint) => {
result.push(`${constraint[1]}`);
});
});
return result;
}

ただ、↓のリファレンスを見ていまして、自分が知らないだけでシンプルに取得出来そうなAPIがあるのでは無いかと質問させていただきました。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map

サンプルまで書いて頂きありがとうございます!

> 意図を理解できているのか自信がありませんが…とりあえず再帰的に書いてみます。
>
>
> function buildError(errors) {
> const results = [];
> errors.forEach((el) => {
> if ( el.constraints !== void 0) {
> Object.entries(el.constraints).forEach(([key, value]) => results.push(value));
> } else {
> Array.prototype.push.apply(results, buildError(el.children))
> }
> });
> return results;
> }


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -