#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
— это число, а не строка