Проверьте, что массив объекта json является подмножеством другого массива объекта json. - PullRequest
0 голосов
/ 12 марта 2019

Я хочу проверить, принадлежит ли каждый массив в testEdge к newarr и вернуть идентификатор, соответствующий каждому массиву в testEdge

const testEdge = [
  [{
    id: '0',
    from: '0',
    to: '1'
  }, {
    id: '1',
    from: '1',
    to: '3'
  }],
  [{
    id: '2',
    from: '0',
    to: '2'
  }, {
    id: '5',
    from: '2',
    to: '3'
  }],
  [{
    id: '0',
    from: '0',
    to: '1'
  }, {
    id: '6',
    from: '1',
    to: '4'
  }, {
    id: '7',
    from: '4',
    to: '6'
  }]
];

const newarr = [{
  id: 0,
  from: "0",
  to: "1"
}, {
  id: 1,
  from: "1",
  to: "3"
}, {
  id: 2,
  from: "0",
  to: "2"
}, {
  id: 3,
  from: "1",
  to: "4"
}]



// Cannot check

Мне нужен код JavaScript

Выше приведены данные, пожалуйста, помогите мне проверить.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

testEdge - это массив массивов, а newarr - это массив объектов.Но id в newarr это число.Поэтому вам нужно преобразовать это в строку перед сравнением.

Также вы можете преобразовать массив массивов testEdge в один массив, используя flat и использовать map в newarr для возврата нового массиваstringifyNewArr которые содержат строковые объекты.Затем используйте includes, чтобы проверить, присутствует ли каждое значение в testEdge в stringifyNewArr

. После этого снова используйте map для testEdge и используйте JSON.stringify для преобразования каждого объекта в строку и используйте includes чтобы проверить я

const testEdge = [
  [{
    id: '0',
    from: '0',
    to: '1'
  }, {
    id: '1',
    from: '1',
    to: '3'
  }],
  [{
    id: '2',
    from: '0',
    to: '2'
  }, {
    id: '5',
    from: '2',
    to: '3'
  }],
  [{
    id: '0',
    from: '0',
    to: '1'
  }, {
    id: '6',
    from: '1',
    to: '4'
  }, {
    id: '7',
    from: '4',
    to: '6'
  }]
];
const newarr = [{
  id: 0,
  from: "0",
  to: "1"
}, {
  id: 1,
  from: "1",
  to: "3"
}, {
  id: 2,
  from: "0",
  to: "2"
}, {
  id: 3,
  from: "1",
  to: "4"
}]
let stringifyNewArr = newarr.map(function(item) {
  let newItem = {
    id: item.id.toString(),
    from: item.from,
    to: item.to
  }
  return JSON.stringify(newItem)

});

let isSameWithNewArr = testEdge.flat().map(function(item) {
  let isSame;


  if (stringifyNewArr.includes(JSON.stringify(item))) {
    isSame = true;
  } else {
    isSame = false
  }
  return isSame;
});

console.log(isSameWithNewArr)
0 голосов
/ 12 марта 2019

Сначала вы можете конвертировать newarr в strings, используя JSON.stringify. А затем используйте every(), чтобы проверить, присутствуют ли все элементы textEdge в newarr

const testEdge = [
  [{ id: '0', from: '0', to: '1' }, { id: '1',from: '1', to: '3' }],
  [{ id: '2',from: '0', to: '2' }, { id: '5',from: '2', to: '3' }],
  [{ id: '0',from: '0', to: '1' }, { id: '6',from: '1', to: '4' }, { id: '7',from: '4', to: '6' }]
];
const newarr = [{id: '0', from: "0", to: "1"}, {id: '1', from: "1", to: "3"}, {id: '2', from: "0", to: "2"}, {id: '3', from: "1", to: "4"}]


let objStrings = newarr.map(x => JSON.stringify(x));


function check(arr1,arr2){
   return arr1.every(x => objStrings.includes(JSON.stringify(x)));
}


console.log(check(testEdge[0],objStrings)); //true
console.log(check(testEdge[1],objStrings)); //false
console.log(check(testEdge[2],objStrings)); //fals
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...