Как проверить, существуют ли все ключ и значение объекта JS в другом объекте JS в JavaScript? - PullRequest
0 голосов
/ 29 января 2020

Предположим, есть два JavaScript объекта.

first = [{valueOne: "DescOne"},{valueTwo: "Desctwo"},{valueThree: "DescThree"},{valueFour: "DescFour"}];

second= [{valueTwo: "Desctwo"},{valueFour: "DescFour"}];

Что я на самом деле хочу, если все ключ и значение second JSON Объект существует в first JSON Объект, затем он вернет match = true или true, иначе он вернет match = false или false.

Примечание: значение first и second будут динамически изменяться, и его индекс тоже

Я должен сделать это в ES

Любая помощь будет принята.

Ответы [ 4 ]

1 голос
/ 29 января 2020
const second = [{valueTwo: "Desctwo"},{valueFour: "DescFour"}]
const first = [{valueOne: "DescOne"},{valueTwo: "Desctwo"},{valueThree: "DescThree"}, {valueFour: "DescFour"}];

const res = second.every((i) => (
  first.find(j => JSON.stringify(i) === JSON.stringify(j))
))
1 голос
/ 29 января 2020

Примените every к массиву second и используйте Object.entries для извлечения ключа и значения, затем проверьте, присутствует ли он в первом массиве.

const second = [{valueTwo: "Desctwo"},{valueFour: "DescFour"}]
const first = [{valueOne: "DescOne"},{valueTwo: "Desctwo"},{valueThree: "DescThree"}, {valueFour: "DescFour"}];

const output = second.every((obj) => {
    const [secondKey, secondVal] = Object.entries(obj)[0];
    return first.some((obj) => {
        const [firstKey, firstVal] = Object.entries(obj)[0];
        return firstKey == secondKey && firstVal == secondVal;
    });
});

console.log(output);
0 голосов
/ 29 января 2020

var first = [{valueOne: "DescOne"},{valueTwo: "Desctwo"},{valueThree: "DescThree"},{valueFour: "DescFour"}];
var second= [{valueTwo: "Desctwo"},{valueFour: "DescFour"}];
var firstObjKeys = [], firstObjValues = [];
var secondObjKeys = [], secondObjValues = [];


first.forEach(element => Object.keys(element).forEach(function(key) { 
	firstObjKeys.push(key);
	firstObjValues.push(element[key]);
}));

second.forEach(item => Object.keys(item).forEach(function(key) { 
	secondObjKeys.push(key);
	secondObjValues.push(item[key]);
}));

if (JSON.stringify(firstObjKeys.sort()) !== JSON.stringify(secondObjKeys.sort())
	|| JSON.stringify(firstObjValues.sort()) !== JSON.stringify(secondObjValues.sort())) {
	console.log('not equal');
} else {
	console.log('equal');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Как насчет этого:

var first = [{valueOne: "DescOne"},{valueTwo: "Desctwo"},{valueThree: "DescThree"},{valueFour: "DescFour"}];
var second= [{valueTwo: "Desctwo"},{valueFour: "DescFour"}];
var firstObjKeyStr = '', secondObjKeyStr = '';
var firstObjValueStr = '', secondObjValueStr = '';
var firstObjKeys = [], firstObjValues = [];
var secondObjKeys = [], secondObjValues = [];


first.forEach(element => Object.keys(element).forEach(function(key) { 
	firstObjKeys.push(key);
	firstObjValues.push(element[key]);
}));
firstObjKeyStr = JSON.stringify(firstObjKeys.sort());
firstObjValueStr = JSON.stringify(firstObjValues.sort());

second.forEach(item => Object.keys(item).forEach(function(key) { 
	secondObjKeys.push(key);
	secondObjValues.push(item[key]);
}));
secondObjKeyStr = JSON.stringify  (secondObjKeys.sort());
secondObjValueStr = JSON.stringify(secondObjValues.sort());

if (firstObjKeyStr !== secondObjKeyStr || firstObjValueStr !== secondObjValueStr) {
	console.log('not equal');
} else {
	console.log('equal');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
0 голосов
/ 29 января 2020

Вот хак для достижения того же:

let arr1 = [{valueOne: "DescOne"},{valueTwo: "Desctwo"},{valueThree: "DescThree"},{valueFour: "DescFour"}];

let arr2 = [{valueTwo: "Desctwo"},{valueFour: "DescFour"}];

arr1 = arr1.map(x => JSON.stringify(x));
arr2 = arr2.map(x => JSON.stringify(x));

console.log(arr1);

console.log(arr2);


let intersection = arr1.filter(value => arr2.includes(value));
intersection = intersection.map(x => JSON.parse(x));

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