我在JSON文件中有两个变量。第一个是键列表,如下所示:
keylist = ["key1","key2","key3"]
第二个是从数据库生成的,看起来像这样:
data = {
"key1"{
#further data
},
"key2"{
#further data
},
"key3"{
#further data
}
}
现在,我想使用keylist
data.keylist[1];
哪个不起作用,因为keylist [1]的返回是字符串?我做了一些研究,并提出了使用窗口函数的建议。所以我尝试了这个:
window["data." + keylist[1]]();
这将导致“不是函数”错误。我该怎么办才能解决这个问题?
答案 0 :(得分:3)
就这么简单:
const mydata = data[ keylist[1] ];
此外,从语法角度来说,您的代码是正确的,但它所讲述的与您期望的完全不同。
data.keylist[1];
告诉JS您期望拥有一个名为data
的对象,该对象具有一个名为keylist
的属性,并且(很可能是)数组类型,并且您想要获取此数组的第二个元素
PS:还有一点。您的问题标题不完全正确,因为JS中的数组和对象之间存在差异。
JS中没有用于数组的“字符串键”,因此您不能“使用字符串键访问数组”。好吧,确实存在,但不是数组项。数组项仅具有数字索引,可用于访问它。与数组相反,对象可能具有命名属性。因此,当您看到类似这样的内容:data = myVar['data']
时,您可以说您正在处理一个对象,而data = someVar[0]
既可以是一个数组(最有可能),也可以是一个名为' 0'。
答案 1 :(得分:2)
我不认为您遇到的第一个示例的问题是因为它返回了密钥。我认为问题是因为private void EllipticCurveDiffieHellman()
{
var ecdh = new ECDiffieHellmanCng(ECCurve.NamedCurves.brainpoolP256r1);
ecdh.KeyDerivationFunction = ECDiffieHellmanKeyDerivationFunction.Hash;
ecdh.HashAlgorithm = CngAlgorithm.Sha256;
//get relevant point from own public key
var ownPublicKey = ecdh.PublicKey.ExportExplicitParameters().Q;
var peersPublicKey = SendPublicKey(ownPublicKey); //key exchange
var sharedSecret = ecdh.DeriveKeyMaterial(peersPublicKey);
Console.WriteLine("Key: " + HexValue.Parse(sharedSecret.ToArray()));
}
DiffieHellmanPublicKey ToPublicKey(byte[] publicKey)
{
var keyLength = 32;
if (publicKey[0] != (2 + 2 * keyLength) - 1)
throw new ArgumentException("Invalid key length", nameof(publicKey));
if (publicKey[1] != 0x04)
throw new ArgumentException("Invalid key format", nameof(publicKey));
var parameters = new ECParameters()
{
Curve = ECCurve.NamedCurves.brainpoolP256r1,
Q = new ECPoint()
{
X = publicKey.Skip(2).Take(keyLength).ToArray(),
Y = publicKey.Skip(2 + keyLength).Take(keyLength).ToArray()
}
};
using (var tmp = ECDiffieHellman.Create(parameters))
{
return tmp.PublicKey;
}
}
没有名为data
的属性。与其相反,请尝试
keylist
,看看是否适合您。该代码应该起作用的原因是,在这种情况下,Javascript将评估data[keylist[1]]
的字符串返回值,然后将其用作keylist[1]
变量的字符串索引。让我知道这是否对您有用:D
答案 2 :(得分:1)
您可以尝试使用类似这样的内容。
data[keylist[1]]