Проверка массива объекта json является подмножеством другого массива объекта json

#javascript #jquery #arrays #object

#javascript #jquery #массивы #объект

Вопрос:

Я хочу проверить, 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

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

Комментарии:

1. каков ожидаемый результат?

2. @brk Я считаю, что это логическое значение.

3. Я ожидаю true или false

4. @JackBashford да, просто логическое значение в порядке

Ответ №1:

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

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

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

 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)  

Комментарии:

1. Спасибо @brk за решение

2. @MonishDe рад помочь

Ответ №2:

Сначала вы можете преобразовать 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  

Комментарии:

1. Он должен показывать значение true для первого массива в testEdge и false для двух других массивов в testEdge.

2. Нет, вы ошиблись, Махир, я хочу проверить для каждого массива в testEdge, присутствуют ли объекты в newarr. Например, в первом массиве id: 0 и id: 1 присутствуют в newarr, поэтому true, а для второго массива id: 2 присутствует, но id: 5 отсутствует, поэтому false.

3. Привет, @Maheer Ali, можешь ли ты получить мне идентификатор, соответствующий для каждого arr в testEdge?

4. id в newarr — это число, а не строка