-2

以下に、オブジェクトの配列の配列があります。オブジェクトを探して、それがどの配列にあるかを見つけたら、その配列の名前を文字列として取得して操作したいと思います。私の推測では、Array.name(以下で実行されるように)のようなものでしたが、それは機能しません。

ActiveDocument.gaShapesTab1 = new Array(ActiveDocument.Sections["Dashboard"].Shapes["Shape1"],ActiveDocument.Secti‌​ons["Dashboard"].Shapes["Shape2"]); 
ActiveDocument.gaShapesTab2 = new Array(ActiveDocument.Sections["Dashboard"].Shapes["Shape3"],ActiveDocument.Secti‌​ons["Dashboard"].Shapes["Shape4"]); 
ActiveDocument.gaShapesTab3 = new Array(ActiveDocument.Sections["Dashboard"].Shapes["Shape5"],ActiveDocument.Secti‌​ons["Dashboard"].Shapes["Shape6"]); 
ActiveDocument.gaShapeArrays = new Array(gaShapesTab1, gaShapesTab2, gaShapesTab3);

// go through an array of arrays
for(var x=0; x<gaShapeArrays.length; x++)
{ 
    // and go through the objects of each one
    for(var y=0; y<gaShapeArrays[x].length; y++)
    {
        // if "object" is in the array
        if(object == gaShapeArrays[x][y])
        {
            // get "sidetab" from object's array's name
            var sidetab = gaShapeArrays[x].name.replace('gaShapes',''); // assumes that shapearrays will have naming convention gaShapesSidetab
            // we found it, we can stop now
            break;
        }
    }
}

私は Hyperion Intelligence で作業しているため、すべての Javascript が適用されるわけではありません。たとえば、ウィンドウやドキュメントにアクセスできません。

各配列には、ビジュアル タブに関連する一連の形状オブジェクトが含まれています。これにより、図形の配列を呼び出すだけで、各タブにあるものを表示または非表示にしたり、より複雑な操作を実行したりできます。しかし、図形自体を操作するときは、図形がどのタブにあるかを知る必要があります。それらがどの配列にあるかを見つけることで、逆方向に作業しようとしています。

4

3 に答える 3

1

あなたはそれをしたくありません。

複数の配列で値を見つけてから識別子を引き出す必要がある場合は、名前付き変数ではなく辞書が必要です。

var dictOfArrays = {
    'evens': [0,2,4,6,8,10],
    'odds': [1,3,5,7,9]
};

これにより、シークする識別子がデータとして保存されるため、その識別子を保存し、必要に応じて後でそれを使用して値を取得できます。

var whichArrayKey = findMyValuesKey(value, dictOfArrays);
console.log('Value '+value+' is in array keyed '+whichArrayKey);
var matchingArray = dictOfArrays[whichArrayKey];
var firstValueInMatchingArray = matchingArray[0];

変数の名前は、開発者がどれがどれであるかを知るために使用するものです。これは、ものが格納されるメモリ内の場所の単なるハンドルです。そのため、コードには何の意味もありません。実際にプログラムで使用する場合は、コードではなくデータであり、上記の辞書のようなデータ構造にエンコードする必要があります。そうすれば、配列または識別子を好きなだけ渡すことができ、コードの動作を変数に付ける名前に結び付ける必要がなくなります。

編集1:

辞書形式/オブジェクト表記で新しく追加されたコード:

ActiveDocument.gaShapeArrays = {
    'gaShapesTab1' : [ 
        ActiveDocument.Sections["Dashboard"].Shapes["Shape1"], 
        ActiveDocument.Secti‌​ons["Dashboard"].Shapes["Shape2"]
    ], 
    'gaShapesTab2' : [
        ActiveDocument.Sections["Dashboard"].Shapes["Shape3"],
        ActiveDocument.Secti‌​ons["Dashboard"].Shapes["Shape4"]
    ],
    'gaShapesTab3' : [
        ActiveDocument.Sections["Dashboard"].Shapes["Shape5"],
        ActiveDocument.Secti‌​ons["Dashboard"].Shapes["Shape6"]
    ]
}

したがって、各キー (「gaShapesTab1」など) は配列値 ( [... ]) とペアになっています。new Array()これは、どこでも使用する代わりです。

オブジェクトに一致する参照を含む配列のキーを見つけたら、そのキーを文字列 (例: "gaShapesTab3") として取得します。この文字列をその場で変更することはできません。変更したくないと思います。配列の名前を変更する必要がある理由を明確にできれば、おそらく問題の解決方法が明確になるでしょう。たとえば、配列に特定の名前を付ける必要がある他のコードはありますか?

于 2013-05-07T15:47:40.787 に答える