JavaScript查找/比较和更新度量/多维数组的重复元素

厄齐尔

我有一个如下的度量/多维数组

[
[a,b,c,d],
[d,a,c,b],
[a,d,b,a],
[c,c,d,a]
]

我需要更新给定的指标并以这种方式跟踪更改

  1. 元素只能在一列中重复。

  2. 如果元素已出现在其他列中,则该元素不能出现在其他列中。

  3. 如果发生上述情况,请通过将列索引附加到其在列中所有出现的位置来更新元素。

在上面的示例中,索引[1] [1](第2行和第2列中的“ a”)元素已出现在第1列中。它的所有出现都应更新为“ a1”。同样,“ d”和“ c”应分别更新为“ d1”和“ c1”。
在下一列的第3列中,第3列中的“ c”,“ b”,“ d”应更新为“ c2”,“ b2”,“ d2”,因为在第2列中出现了“ b”,类似的是“ c”和“ d”之前已经发生。
在下一列中,列4'd','b','a'将更新为'd4','b4','a4'。

结果指标看起来像

[
[a,b, c3,d4],
[d,a2,c3,b4],
[a,d2,b3,a4],
[c,c2,d3,a4]
]

跟踪我们可以跟踪的部分

var dictionary = [{"updatedValue":"originalValue"},...]
var dictionary = [{"a2":"a"},{"d2","d"},{"c2","c"},{"c3":"c"},{"b3":"b"},{"d3":"d"},{"d4","d"},{"a4":"a"},{"b4","b"}];  

到目前为止,我已经尝试过

  var flatData = [
        ['a', 'b', 'c', 'd'],
        ['d', 'a', 'c', 'b'],
        ['a', 'd', 'b', 'a'],
        ['c', 'c', 'd', 'a'],
    ];
    for (var i = 0; i < flatData.length; i++) {
        for (var j = 0; j < flatData[i].length; j++) {
            var element = flatData[i][j];
            for (var k = 0; k < flatData.length; k++) {
                for (var l = 0; l < flatData[k].length; l++) {
                    if (j != l) {
                        if (element == flatData[k][l]) {
                            flatData[k][l] = flatData[k][l] + l;
                        }
                    }
                }
            }
        }
    }
    console.log(JSON.stringify(flatData));

查理

解决方案使用Map(也可以是普通对象),其中第一次遇到值时,将创建一个具有object的新条目{col: firstColIndexFound, count:0}

下次遇到相同的值时,它将检查存储的列索引,如果不同则更新计数并创建一个新值

const data = [
  ['a', 'b', 'c', 'd'],
  ['d', 'a', 'c', 'b'],
  ['a', 'd', 'b', 'a'],
  ['c', 'c', 'd', 'a']
];


const dict = {};
const map = new Map();

for (let c = 0; c < data[0].length; c++) { // c for colIndex
  for (let r = 0; r < data.length; r++) { // r for rowIndex
    const el = data[r][c];
    if (!map.has(el)) {
      // first time found create new entry
      map.set(el, {col: c, count: 0});
    }
    const entry = map.get(el);
    // if column index different than first column found update value
    if (c !== entry.col) {
      entry.count++;
      const nVal = el + entry.count;
      dict[nVal] = el;
      data[r][c] = nVal;
    }
  }
}

console.log(JSON.stringify(data))
console.log(dict)
.as-console-wrapper {
  max-height: 100%!important;
  top: 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章