Как проверить, есть ли такая же строка в объекте? - PullRequest
0 голосов
/ 10 февраля 2019

Использование JavaScript / Node Я пытаюсь проверить, есть ли строка (x) в каком-либо из объектов в массиве.Вот пример:

{
x: 'testx',
y: 'testy',
z: 'textz'
},

{
a: 'testa',
b: 'testb',
c: 'textc'
}
]


var arr2 = [
{
x: 'testx'
},

{
a: 'testa',
b: 'notb'
}
]

Я хочу проверить, есть ли какое-либо из свойств arr2 внутри какого-либо из свойств объектов arr 1, и просто войти в консоль, если свойство не являетсятак же.Извините, если это сбивает с толку, я новичок в JavaScript, и это трудно объяснить: (

Я пробовал это:

newProducts.each((i, el) => {
        if (Object.values(arr).indexOf('testb') > -1) {
            console.log(`has testb`);
        }
    });

Я также пытался зацикливание обоих массивов исравнивая, но я не могу выбрать те, которые отличаются.

Ответы [ 3 ]

0 голосов
/ 10 февраля 2019

Создайте объект из arr1, который будет хранить все значения prop: из массива, так как все реквизиты в arr2 должны будут пройти через весь реквизит:

const aggregatedArr1 = arr1.reduce((acc, o) => (Object.keys(o).forEach(k => acc[k] = o[k]), acc), {});

Для каждого реквизита в arr2 сравните его с aggregatedArr1 реквизитами и, если совпадение, выведите значение реквизита:

arr2.forEach(obj => Object.entries(obj).forEach(([key, val]) => {
    if (aggregatedArr1.hasOwnProperty(key) && aggregatedArr1[key] !== val) {
      console.log(val);
    }
  }))

function main() {
  const aggregatedArr1 = arr1.reduce((acc, o) => (Object.keys(o).forEach(k => acc[k] = o[k]), acc), {});
  arr2.forEach(obj => Object.entries(obj).forEach(([key, val]) => {
    if (aggregatedArr1.hasOwnProperty(key) && aggregatedArr1[key] !== val) {
      console.log(val);
    }
  }))
}

var arr1 = [{
    x: 'testx',
    y: 'testy',
    z: 'textz'
  },

  {
    a: 'testa',
    b: 'testb',
    c: 'textc'
  }
]


var arr2 = [{
    x: 'testx'
  },

  {
    a: 'testa',
    b: 'notb'
  }
]

main();
0 голосов
/ 10 февраля 2019

Решение выходит здесь:

    var arr1 = [{
        x: 'testx',
        y: 'testy',
        z: 'textz'
    },
    {
        a: 'testa',
        b: 'testb',
        c: 'textc'
    }];
var arr2 = [
    {
        x: 'testx'
    },
    {
        a: 'testa',
        b: 'notb'
    }
]
var set = {};
arr1.forEach((elem, index, arr)=> {
    for(let key in elem) {
        set[key] = elem[key];
    }
});
let matches = {};
arr2.forEach((elem, index, arr) => {
    for(let key in elem) {
        if(set[key] === elem[key]) {
            matches[key] = set[key];
        }
    }
})
console.log(matches);
0 голосов
/ 10 февраля 2019

используйте forEach на arr1 и внутри него используйте for..in.Ваши значения в объектах показывают, что вы хотите проверить только те же самые объекты индекса

var arr1 =  [{
    x: 'testx',
    y: 'testy',
    z: 'textz'
  },

  {
    a: 'testa',
    b: 'testb',
    c: 'textc'
  }
]


var arr2 = [
  {
   x: 'testx'
  },

  {
   a: 'testa',
   b: 'notb'
  }
]
arr1.forEach((obj,i) => {
  for(let key in obj){
    if(obj[key] === arr2[i][key]) console.log(obj[key])
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...