如何定义 Javascript 数组,具有多个 ID 但 return 一个值?
How to define Javascript array, with mutiple IDs but return one value?
抱歉,我是 Javascript 的新手。
我有以下 var
数组 ...
var sections = [
{ key: "SB04", label:"Storage 4 WBA" },
{ key: "SBO4", label:"Storage 4 CT" },
{ key: "CR04", label:"Storage 4 CR" },
];
如何根据与列表中的键匹配的键,将此数组重新定义为 return 相同的 label 一次,如此处所示?
所以我尝试使用这个版本,但它在 Chrome 中返回语法错误。
var sections = [
{ key: ("SB04","SB04A","SB04B"), label:"Storage 4 WBA" },
{ key: ("SBO4","SBO4C","SBO4D","SBO4TEST"), label:"Storage 4 CT" },
{ key: "CR04", label:"Storage 4 CR" },
];
因此 GetLabel("SB04C")
或 GetLabel("SB04TEST")
之类的内容将 return 仅“Storage 4 CT”。
显然,必须定义 GetLabel()
。但我很高兴能得到关于如何将上面的 var
重新编码为浏览器可以理解的内容的答案。
我试过了,但我不止一次使用它 return 标签...
var sections = [
{ key: "SB04", label:"Storage 4 WBA" },
{ key: "SB04A", label:"Storage 4 WBA" },
{ key: "SB04B", label:"Storage 4 WBA" },
{ key: "SBO4", label:"Storage 4 CT" },
{ key: "SBO4C", label:"Storage 4 CT" },
{ key: "SBO4D", label:"Storage 4 CT" },
{ key: "SBO4TEST", label:"Storage 4 CT" },
{ key: "CR04", label:"Storage 4 CR" },
];
例如输出:
> Storage 4 WBA
> Storage 4 WBA
> Storage 4 WBA
尽管我只给了我的代码一个键 - SB04A
这就是你的意思吗?
const sections = getValues()
.reduce((acc, val) => ({ ...acc,
[val.label]: (acc[val.label] || []).concat(val.key)
}), {});
console.log(sections);
// this can be mapped back to an array of objects:
const mapped = Object.entries(sections)
.map( ([key, value]) => ({label: key, keys: value}) ) ;
console.log(mapped[0]);
function getValues() {
return [{
key: "SB04",
label: "Storage 4 WBA"
},
{
key: "SB04A",
label: "Storage 4 WBA"
},
{
key: "SB04B",
label: "Storage 4 WBA"
},
{
key: "SBO4",
label: "Storage 4 CT"
},
{
key: "SBO4C",
label: "Storage 4 CT"
},
{
key: "SBO4D",
label: "Storage 4 CT"
},
{
key: "SBO4TEST",
label: "Storage 4 CT"
},
{
key: "CR04",
label: "Storage 4 CR"
},
];
}
我想你正在寻找 Set。
const sections = [
{ key: new Set(["SB04", "SB04A", "SB04B"]), label: "Storage 4 WBA" },
{
key: new Set(["SBO4", "SBO4C", "SBO4D", "SBO4TEST"]),
label: "Storage 4 CT",
},
{ key: new Set(["CR04"]), label: "Storage 4 CR" },
];
const getLabelByKey = (sections, key) => {
for (const section of sections) {
if (section.key.has(key)) {
return section.label;
}
}
return null;
};
console.log(getLabelByKey(sections, "SBO4C"));
抱歉,我是 Javascript 的新手。
我有以下 var
数组 ...
var sections = [
{ key: "SB04", label:"Storage 4 WBA" },
{ key: "SBO4", label:"Storage 4 CT" },
{ key: "CR04", label:"Storage 4 CR" },
];
如何根据与列表中的键匹配的键,将此数组重新定义为 return 相同的 label 一次,如此处所示?
所以我尝试使用这个版本,但它在 Chrome 中返回语法错误。
var sections = [
{ key: ("SB04","SB04A","SB04B"), label:"Storage 4 WBA" },
{ key: ("SBO4","SBO4C","SBO4D","SBO4TEST"), label:"Storage 4 CT" },
{ key: "CR04", label:"Storage 4 CR" },
];
因此 GetLabel("SB04C")
或 GetLabel("SB04TEST")
之类的内容将 return 仅“Storage 4 CT”。
显然,必须定义 GetLabel()
。但我很高兴能得到关于如何将上面的 var
重新编码为浏览器可以理解的内容的答案。
我试过了,但我不止一次使用它 return 标签...
var sections = [
{ key: "SB04", label:"Storage 4 WBA" },
{ key: "SB04A", label:"Storage 4 WBA" },
{ key: "SB04B", label:"Storage 4 WBA" },
{ key: "SBO4", label:"Storage 4 CT" },
{ key: "SBO4C", label:"Storage 4 CT" },
{ key: "SBO4D", label:"Storage 4 CT" },
{ key: "SBO4TEST", label:"Storage 4 CT" },
{ key: "CR04", label:"Storage 4 CR" },
];
例如输出:
> Storage 4 WBA
> Storage 4 WBA
> Storage 4 WBA
尽管我只给了我的代码一个键 - SB04A
这就是你的意思吗?
const sections = getValues()
.reduce((acc, val) => ({ ...acc,
[val.label]: (acc[val.label] || []).concat(val.key)
}), {});
console.log(sections);
// this can be mapped back to an array of objects:
const mapped = Object.entries(sections)
.map( ([key, value]) => ({label: key, keys: value}) ) ;
console.log(mapped[0]);
function getValues() {
return [{
key: "SB04",
label: "Storage 4 WBA"
},
{
key: "SB04A",
label: "Storage 4 WBA"
},
{
key: "SB04B",
label: "Storage 4 WBA"
},
{
key: "SBO4",
label: "Storage 4 CT"
},
{
key: "SBO4C",
label: "Storage 4 CT"
},
{
key: "SBO4D",
label: "Storage 4 CT"
},
{
key: "SBO4TEST",
label: "Storage 4 CT"
},
{
key: "CR04",
label: "Storage 4 CR"
},
];
}
我想你正在寻找 Set。
const sections = [
{ key: new Set(["SB04", "SB04A", "SB04B"]), label: "Storage 4 WBA" },
{
key: new Set(["SBO4", "SBO4C", "SBO4D", "SBO4TEST"]),
label: "Storage 4 CT",
},
{ key: new Set(["CR04"]), label: "Storage 4 CR" },
];
const getLabelByKey = (sections, key) => {
for (const section of sections) {
if (section.key.has(key)) {
return section.label;
}
}
return null;
};
console.log(getLabelByKey(sections, "SBO4C"));