在 javascript 中合并并创建一个区分大小写的唯一数组
Merge and create an unique case sensitive array in javascript
这是一个复杂的场景,但会尽可能多地解释。我有一个对象或数组和一个数组。现在我必须将选定模型值与映射模型进行比较,如果值(不区分大小写)与该对象匹配,则获取它的所有值并将其推送到选定模型中并将两者结合起来。希望这个例子能清楚我想要达到的目标。
var mappedModels = { 'CC605': ['cc605', 'CC605', 'cC605'], 'TC75X': ['TC75X'] };
var selectedModels = ['CC605', 'tc76'];
var desiredOutput = ["CC605", "tc76", "cc605", "cC605"];
我已经写了一个解决方案来实现它,但我需要一个性能更好的代码。这是解决方案:
function combineModelCases(selectedModels) {
const modelCases = [];
selectedModels.forEach(elm => {
const existingModels = mappedModels[elm.toUpperCase()];
if (existingModels) {
for (const key of existingModels) {
if (elm.toUpperCase() !== key) {
modelCases.push(key);
}
}
}
});
return selectedModels.concat(modelCases);
}
这里是Fiddle
我正在使用打字稿和下划线 js 供您参考。任何帮助都会非常有帮助。
您可以执行以下操作:
var mappedModels = { 'CC605': ['cc605', 'CC605', 'cC605'], 'TC75X': ['TC75X'] };
var selectedModels = ['CC605', 'tc76'];
var desiredOutput;
function combineModelCases(selectedValue){
if(mappedModels.hasOwnProperty(selectedValue)){
desiredOutput = [... new Set([...mappedModels[selectedValue], ...selectedModels])]
return desiredOutput;
}
}
console.log(combineModelCases('CC605'));
这是工作演示:https://jsfiddle.net/wzo4d6uy/2/:
您可以使用 flatMap
to get a flattened array of values for each key in selectedModels
. Then, create a Set
to get a unique collection models. Use Array.from()
将集合转换为数组。
const mappedModels = { 'CC605': ['cc605', 'CC605', 'cC605'], 'TC75X': ['TC75X'] },
selectedModels = ['CC605', 'tc76'];
const models = selectedModels.flatMap(m => mappedModels[m] || []),
unique = Array.from(new Set([...selectedModels, ...models]));
console.log(unique)
这是一个复杂的场景,但会尽可能多地解释。我有一个对象或数组和一个数组。现在我必须将选定模型值与映射模型进行比较,如果值(不区分大小写)与该对象匹配,则获取它的所有值并将其推送到选定模型中并将两者结合起来。希望这个例子能清楚我想要达到的目标。
var mappedModels = { 'CC605': ['cc605', 'CC605', 'cC605'], 'TC75X': ['TC75X'] };
var selectedModels = ['CC605', 'tc76'];
var desiredOutput = ["CC605", "tc76", "cc605", "cC605"];
我已经写了一个解决方案来实现它,但我需要一个性能更好的代码。这是解决方案:
function combineModelCases(selectedModels) {
const modelCases = [];
selectedModels.forEach(elm => {
const existingModels = mappedModels[elm.toUpperCase()];
if (existingModels) {
for (const key of existingModels) {
if (elm.toUpperCase() !== key) {
modelCases.push(key);
}
}
}
});
return selectedModels.concat(modelCases);
}
这里是Fiddle
我正在使用打字稿和下划线 js 供您参考。任何帮助都会非常有帮助。
您可以执行以下操作:
var mappedModels = { 'CC605': ['cc605', 'CC605', 'cC605'], 'TC75X': ['TC75X'] };
var selectedModels = ['CC605', 'tc76'];
var desiredOutput;
function combineModelCases(selectedValue){
if(mappedModels.hasOwnProperty(selectedValue)){
desiredOutput = [... new Set([...mappedModels[selectedValue], ...selectedModels])]
return desiredOutput;
}
}
console.log(combineModelCases('CC605'));
这是工作演示:https://jsfiddle.net/wzo4d6uy/2/:
您可以使用 flatMap
to get a flattened array of values for each key in selectedModels
. Then, create a Set
to get a unique collection models. Use Array.from()
将集合转换为数组。
const mappedModels = { 'CC605': ['cc605', 'CC605', 'cC605'], 'TC75X': ['TC75X'] },
selectedModels = ['CC605', 'tc76'];
const models = selectedModels.flatMap(m => mappedModels[m] || []),
unique = Array.from(new Set([...selectedModels, ...models]));
console.log(unique)