在这里给新的程序员和用户一个新的名字。 我不想在代码中使用goto,因为我不想被称为“不好的程序员”。 我需要你的经验来摆脱它。
var obj = {
"seamark:name": "Z-2",
"seamark:type": "buoy_lateral",
"seamark:light:range": "5",
"seamark:light:colour": "red",
"seamark:light:character": "Q",
"seamark:radar_reflector": "yes",
"seamark:buoy_lateral:shape": "can",
"seamark:buoy_lateral:colour": "red",
"seamark:buoy_lateral:system": "iala-a",
"seamark:buoy_lateral:category": "port"
}
let newObj = {}
for(let [key, val] of Object.entries(obj)) {
let keys = key.split(':')
keys.reduce((o, d, i) => (
i == keys.length - 1
? (o[d] = val)
: (o[d] = o[d] || {})
, o[d])
, newObj)
}
console.log(newObj)
答案 0 :(得分:1)
无需创建函数,将“ goto”替换为“ j = -1;”
答案 1 :(得分:0)
只需将come
块(内部for循环)替换为一个函数。然后,您调用goto come
而不是come()
(假设函数的名称为“ come”)。
答案 2 :(得分:0)
替换
come:
for (int j = 0; j < i; j++)
{
if (a[i] == a[j])
{
if (i % 2 == 0)
{
a[i] = 65 + rand() % 26; goto come;
}
else
{
a[i] = 97 + rand() % 26; goto come;
}
}
else
continue;
}
使用
int loop=0;
do
{
for (int j = 0; j < i; j++)
{
if (a[i] == a[j])
{
if (i % 2 == 0)
{
a[i] = 65 + rand() % 26;
}
else
{
a[i] = 97 + rand() % 26;
}
loop=1;
break;
}
else
loop=0;
}
}while(loop);
这是比其他答案更通用的解决方案。这是基于以下认识:找到匹配项(a[i] == a[j])
时,您只想从顶部开始再次运行主for
循环。 (您可以通过将j
设置为-1来获得相同的结果,但这并非在所有情况下都有效,并且在j
需要为unsigned
的情况下肯定不是)