基于另一个对象的键值对将字符串数组映射到数字数组



我正在尝试映射字符串数组

arrString = [
["A", "B"],
["C", "D"],
["E", "F"],
["D", "A"],
["F", "C"],
["G", "E"]
] 

基于关键值对象:

map =  {
'0': 'A',
'1': 'B',
'2': 'C',
'3': 'D',
'4': 'E',
'5': 'F',
'6': 'G'
}

转换成数字数组

arrNum = [
["0", "1"],
["2", "3"],
["4", "5"],
["3", "0"],
["5", "2"],
["6", "4"]
] 

这就是我所做的:

const map = {}
const arrNum = Array.from(new Array(arrString.length), () => new Array(arrString[0].length).fill([]));
for(let i = 0; i < arr2.length; i++){
map[i] = arr2[i]
}
for(let ele in arrString){
// I can't figure out how to if the obbject value is equal to ele push it's key to arrNum
if (Object.values(map).includes(ele)) 
}

正如您所看到的,我正在尝试循环使用arrString,然后如果映射中的任何元素等于一个值,我想将其键添加到arrNum中。

所以有人知道怎么做,这样我就可以得到arrNum了吗?

const arrString = [
["A", "B"],
["C", "D"],
["E", "F"],
["D", "A"],
["F", "C"],
["G", "E"]
]
map = {
'0': 'A',
'1': 'B',
'2': 'C',
'3': 'D',
'4': 'E',
'5': 'F',
'6': 'G'
}
const arrNum = arrString.map(as => as.map(a => {
for(const k in map){
if (map[k] === a) return k;
}
}));
console.log(arrNum);

您可以使用:

const arrString = [
["A", "B"],
["C", "D"],
["E", "F"],
["D", "A"],
["F", "C"],
["G", "E"]
];
map =  {
'0': 'A',
'1': 'B',
'2': 'C',
'3': 'D',
'4': 'E',
'5': 'F',
'6': 'G'
};
const keys = Object.keys(map);
const arrNum = arrString.map(item => item.map(value => keys.find(key => map[key] === value)));
console.log(arrNum);

首先反转映射,然后使用它来匹配字母。

const arrString = [
["A", "B"],
["C", "D"],
["E", "F"],
["D", "A"],
["F", "C"],
["G", "E"]
] 

const map =  {
'0': 'A',
'1': 'B',
'2': 'C',
'3': 'D',
'4': 'E',
'5': 'F',
'6': 'G'
}
const invertedMap = Object.fromEntries(Object.entries(map).map(([a,b])=>[b,a]))
console.log('Inverted Map:',invertedMap)
const output = arrString.map(inner => inner.map(char => invertedMap[char]))
console.log('Result:',output)

最新更新