JavaScript: как я могу отсортировать значения в словаре, чтобы вывести совпадающие значения и вывести значения, которые не совпадают, показывая пустой результат - PullRequest
0 голосов
/ 21 января 2019

У меня есть набор данных следующим образом
Слева: Справа:

1 1
2 2
3 3
5 4
7 6
9 8
1 10

Я хочу, чтобы результат / результат был таким
Результат

1/1
2/2
3/3
- / 4
5 / -
- / 6
7 / -
- / 8
9 / -
10/10

Я структурировал два набора данных в словарь

клавиша: 1, значение {слева: 1 справа: 2} и т. Д.

Как мне отсортировать их и сопоставить их по значению? любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 21 января 2019

Попробуйте что-то вроде этого:

        Array.prototype.max = function(){
          return Math.max.apply(null, this);
        };

        Array.prototype.min = function(){
          return Math.min.apply(null, this);
        };

        function onlyUnique(value, index, self){ 
            return self.indexOf(value) === index;
        }

        var a1 = [1,2,3,5,7,9,1],
            a2 = [1,2,3,4,6,8,10];
            min = [
                a1.min(), a2.min()
            ].min(),
            max = [
                a1.max(), a2.max()
            ].max(),
            res = [],
            arr = a1.concat(a2).filter(onlyUnique).sort((i1,i2) => i1-i2)

        for(var i=0; i<arr.length; i++){
            var n = arr[i]

            res.push({key: n, value: {
                left:  a1.includes(n) ? n : '-',
                right: a2.includes(n) ? n : '-'
            }})
        }

        console.log(res);
0 голосов
/ 21 января 2019

Примерно так может сработать, хотя и не идеально:

const data = [{key: 1, value {left: 1 right: 2}}, ...]

const leftValues = data.map(d => d.value.left).sort()
const rightValues = data.map(d => d.value.right).sort()

// assuming same length for left and right arrays
for (let i = 0; i < leftValues.length; i++) {
  const left = leftValues[i]
  const right = rightValues[i]
  if (left === right) {
    console.log(`${left} / ${right}`)
  } else if (left < right) {
    console.log(`${left} / -`)
  } else if (right > left) {
    console.log(`- / ${right}`)
  } else {
    // do your thing
  }

}

0 голосов
/ 21 января 2019

// Assuming you have two sorted arrays
left = [1,2,3,5,7,9,10]
right = [1,2,3,4,6,8,10]

let i=0;j=0;
// Assuming you only have to print the result
while(i<left.length && j<right.length) {
  if(left[i] == right[j])
    console.log(left[i++] + ' / ' + right [j++]);
  else if(left[i] < right [j])
    console.log(left[i++] + ' / -');
  else
    console.log('- / ' + right[j++]);
}
while(i<left.length) {
    console.log(left[i++] + ' / -');
}
while(j<right.length) {
    console.log('- / ' + right[j++]);
}

Обратите внимание, что если массивы не отсортированы, есть более оптимальные способы добиться этого, чем сортировка двух массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...