简体   繁体   English

根据另一个 object 的键值对将字符串数组映射到数字数组

[英]mapping an array of strings to an array of numbers based on key value pairs of another object

I am trying to map an array of strings我正在尝试 map 一个字符串数组

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

based on an object of key values:基于 object 键值:

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

into an array of numbers成一个数字数组

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

This is what I have done:这就是我所做的:

    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)) 
    }

As you can see I am trying to loop through arrString and then if any element equals a value in map I want to add its key to arrNum.如您所见,我正在尝试遍历 arrString,然后如果任何元素等于 map 中的值,我想将其键添加到 arrNum。

So anyone knows how to do it so I can end up with 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);

You can use:您可以使用:

 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);

First invert the map, then use it to match the letters.先把map倒过来,然后用它来匹配字母。

 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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM