我有一个例子JSON
data = JSON.parse(dataLang);
//which produces this
{
"Scientific Name1a":"Normal Name1",
"Scientific Name2a":"Normal Name2",
"Scientific Name3a":"Normal Name3",
"Scientific Name4a":"Normal Name4",
}
or
{
"Locality Names1":"Normal Name1",
"Local Name2":"Normal Name2",
"Local Name3":"Normal Name3",
}或取决于用户的selected value,这取决于Scientific还是Local Name。
之后,我对如何实现更改Name of an element,Context Menu,etc感到困惑。
是否有任何方法来实现处理传递单词的函数,例如
场景A
CallFunction(["Normal Name1,Normal Name2"]);
function CallFunction(collection){
//How to implement
return ["Scientific Name1a,Scientific Name2a"]
}场景B
CallFunction("Local Name2");
function CallFunction(collection){
return "Normal Name2"
}发布于 2016-01-22 01:34:07
您应该将一个单独字符串的数组传递给CallFunction,而不是一个字符串。
CallFunction(["Normal Name1", "Normal Name2"]);然后,该函数可以遍历data并返回具有匹配值的键。
function CallFunction(collection) {
var result = [];
for (var key in data) {
if (collection.indexOf(data[key]) != -1) {
result.push(key);
}
}
return result;
}这将返回一个类似于[Scientific Name1a", "Scientific Name2a"]的数组。与输入一样,每个字符串都是结果中的一个单独的数组元素,而不是组合成一个元素;如果要将它们组合成单个字符串,可以在函数返回后使用.join()。
如果你倒置你的data数组,效果会更好。
var dataByNormal = {};
for (var scientific in data) {
dataByNormal[data[scientific]] = scientific;
}然后,可以将CallFunction编写为:
function CallFunction(collection) {
var result = [];
for (var i = 0; i < collection.length; i++) {
if (collection[i] in dataByNormal) {
result.push(dataByNormal[collection[i]]);
}
}
return result;
}如果希望CallFunction能够接受数组或单个字符串,它可以首先检查参数的类型。
function CallFunction(collection) {
if (typeof collection == "string") {
// If we're called with a single string, treat it like a 1-element array
collection = [collection];
}
// ...
}https://stackoverflow.com/questions/34937097
复制相似问题