1
votes

Comment obtenir des valeurs d'un tableau d'objets dans un autre tableau d'objets

Je voulais obtenir des valeurs d'un tableau d'objets avec des clés et des valeurs dans un autre tableau d'objets avec les mêmes clés.

const resultArray = [
  {
      title: 'Some Title 1',
      key: 'key1',
      number: 7,
      icon: require('../../assets/some2.png')
  },
  {
      title: 'Some Title 2',
      key: 'key2',
      number: 1,
      icon: require('../../assets/some1.png')
  },
  {
      title: 'Some Title 3',
      key: 'key3',
      number: 37,
      icon: require('../../assets/some3.png')
  }
]

      keys.map((key) => {
      if (array2[key] === key) {
         // console.log('card detail matching');
         // add to the array 2 with value 
        }
      })

J'ai essayé d'utiliser Object.keys pour obtenir toutes les clés de l'objet array1.

const keys = Object.keys(obj);
const array2 = [
  {
      title: 'Some Title 1',
      key: 'key1',
      number: '',
      icon: require('../../assets/some2.png')
  },
  {
      title: 'Some Title 2',
      key: 'key2',
      number: '',
      icon: require('../../assets/some1.png')
  },
  {
      title: 'Some Title 3',
      key: 'key3',
      number: '',
      icon: require('../../assets/some3.png')
  },
];

mais après un point, cela n'a pas de sens.

Tableau attendu

const array1 = [{
                key1: 7,
                key2: 1,
                key3: 37,
               }];

Je m'attends à ce que la sortie soit les valeurs de la clé qui seraient entrées dans array2 dans la clé 'number'. p >


1 commentaires

le code que vous avez écrit ne fait rien, alors en quoi cela n'a-t-il pas de sens?


5 Réponses :


0
votes

Vous pouvez parcourir chaque objet de array2 et ajouter la valeur numérique extraite de array1

const array1 = [{
	key1: 7,
	key2: 1,
	key3: 37,
 }];

 const array2 = [
  {
      title: 'Some Title 1',
      key: 'key1',
      number: '',
      icon: '../../assets/some2.png'
  },
  {
      title: 'Some Title 2',
      key: 'key2',
      number: '',
      icon: '../../assets/some1.png'
  },
  {
      title: 'Some Title 3',
      key: 'key3',
      number: '',
      icon: '../../assets/some3.png'
  },
];

array2.forEach(e => e.number = array1[0][e.key]);
console.log(array2)


0 commentaires

2
votes

Vous pouvez mapper un nouveau tableau en utilisant la clé comme accesseur pour les clés.

const
    array1 = [{ key1: 7, key2: 1, key3: 37 }],
    array2 = [{ title: 'Some Title 1', key: 'key1', number: '', icon: '../../assets/some2.png' }, { title: 'Some Title 2', key: 'key2', number: '', icon: '../../assets/some1.png' }, { title: 'Some Title 3', key: 'key3', number: '', icon:'../../assets/some3.png' }],
    result = array2.map(o => Object.assign({}, o, { number: array1[0][o.key] }));

console.log(result);


0 commentaires

1
votes

Le code ci-dessous vous aide: -

const array1 = {
                key1: 7,
                key2: 1,
                key3: 37,
               };

const array2 = [
  {
      title: 'Some Title 1',
      key: 'key1',
      number: '',
      icon: require('../../assets/some2.png')
  },
  {
      title: 'Some Title 2',
      key: 'key2',
      number: '',
      icon: require('../../assets/some1.png')
  },
  {
      title: 'Some Title 3',
      key: 'key3',
      number: '',
      icon: require('../../assets/some3.png')
  },
];

array2.forEach(item=>{
  item.number=array1[item.key]
})


0 commentaires

0
votes

const array1 = [{
                key1: 7,
                key2: 1,
               }];
const array2 = [
  {
      title: 'Some Title 1',
      key: 'key1',
      number: '',
      icon: '../../assets/some2.png'
  },
  {
      title: 'Some Title 2',
      key: 'key2',
      number: '',
      icon: '../../assets/some1.png'
  },
  {
      title: 'Some Title 3',
      key: 'key3',
      number: '',
      icon: '../../assets/some3.png'
  },
];
const resultArray = array2.filter(item => array1[0][item.key]);

console.log(resultArray);

Vous pouvez filtrer pour obtenir le résultat.


0 commentaires

0
votes

Cela devrait fonctionner pour vous.

const keys = [
  {
    key1: 7,
    key2: 1,
    key3: 37,
  },
  {
    key4: 7,
    key5: 1,
    key6: 37,
  }
];

const array2 = [
  {
      title: 'Some Title 1',
      key: 'key4',
      number: ''
  },
  {
      title: 'Some Title 2',
      key: 'key2',
      number: ''
  },
  {
      title: 'Some Title 3',
      key: 'key3',
      number: ''
  }
];

function populateArrayData (arr, propToCompare, propToReplace, keysObj) {
  let populatedArray = [];
  
  if (Array.isArray(arr)) {
    populatedArray = arr.map((item) => {
      if (checkIfKeyExists(item[propToCompare], keysObj)) {
          item[propToReplace] = keysObj[item[propToCompare]];
      }
      return item;
    });
  }
  
  return populatedArray;
}

function flattenAllKeys (keys) {
  let flattenedKeysObj = {};
  
  if (Array.isArray(keys)) {
    flattenedKeysObj = keys.reduce((acc, keysObj) => {
      acc = {...acc, ...keysObj};
      return acc;
    }, {});
  }

  return flattenedKeysObj;
}

            
function checkIfKeyExists(key, keysObj) {
  return (keysObj[key]!== undefined && keysObj[key]!== null);
}
  
let flattenedKeys = flattenAllKeys(keys);

console.log(populateArrayData(array2, 'key', 'number', flattenedKeys));
  
  
  


0 commentaires