मेरे पास वस्तुओं के 2 सरणी हैं:

const a = [
  {
    name: 'Jack',
    id: '2'
  },
  {
    name: 'Jill',
    id: '25'
  },
  {
    name: 'Bill',
    id: '288'
  }
]
const b = [
  {
    title: 'alfa',
    a_id: '2'
  },
  {
    title: 'beta',
    a_id: '25'
  }
]


const test = b.map(i => {
  a.filter(u => {
    console.log(u.id === i.a_id)
    return Object.values(u).includes(i)
  })
})

console.log(test)

मुझे b को लूप करना है, और यह जांचने के लिए कि a_id a से आईडी से मेल खाता है, a से नाम वापस करने के लिए जो स्थिति की जांच करता है a_id ==id . यह कैसे करना है?

फाइनल में मुझे 2 नाम लेने हैं: जिल और जैक

-3
Asking 3 अप्रैल 2020, 11:48
3
तुमने अब तक क्या प्रयास किया है ? कृपया कोड पोस्ट करें
 – 
Code Maniac
3 अप्रैल 2020, 11:49
पागल, मैंने पोस्ट किया
 – 
Asking
3 अप्रैल 2020, 11:52
अगर आप सुनिश्चित नहीं हैं कि सभी b तत्वों में एक समान a तत्व है: jsfiddle.net/ p02jg5yb
 – 
blex
3 अप्रैल 2020, 11:54
पागल, क्या आपने इस सवाल को कम कर दिया?
 – 
AskMen
3 अप्रैल 2020, 20:50
प्रारंभ में जब कोई कोड पोस्ट नहीं किया गया था, लेकिन जब आपने अपना कोड अपडेट किया तो मैंने अपना डाउन वोट रद्द कर दिया। और इसे upvote करने के लिए बदल दिया
 – 
Code Maniac
4 अप्रैल 2020, 04:44

4 जवाब

सबसे इष्टतम समाधान नहीं हो सकता है। https://jsfiddle.net/5tzqj6ek/

const a = [
  {
    name: 'Jack',
    id: '2'
  },
  {
    name: 'Jill',
    id: '25'
  },
  {
    name: 'Bill',
    id: '288'
  }
]
const b = [
  {
    title: 'alfa',
    a_id: '2'
  },
  {
    title: 'beta',
    a_id: '25'
  }
]

var matchname = [];
b.forEach(objb => {
  a.forEach(obja => {
    if (objb.a_id === obja.id) {
      matchname.push(obja.name);
    }
  })
})
console.log(matchname);
2
Y4glory 3 अप्रैल 2020, 12:21

वह हो सकता है :

const a = [{
    name: 'Jack',
    id: '2'
  },
  {
    name: 'Jill',
    id: '25'
  },
  {
    name: 'Bill',
    id: '288'
  }
]
const b = [{
    title: 'alfa',
    a_id: '2'
  },
  {
    title: 'beta',
    a_id: '25'
  }
]

const test = b.map(i => {
  a.map(j => {
    console.log(j.id === i.a_id ? `${j.id} equals ${i.a_id}` : `not equals`)
  })
})
1
blex 3 अप्रैल 2020, 12:00

आप forEach और find का उपयोग कर सकते हैं

const a = [{name: 'Jack',id: '2'},{name: 'Jill',id: '25'},{name: 'Bill',id: '288'}]
const b = [{title: 'alfa',a_id: '2'},{title: 'beta',a_id: '25'}]

b.forEach(i => {
  let found = a.find(u => u.id === i.a_id)
  if (found) {
    console.log(found.name)
  }
})
0
Code Maniac 3 अप्रैल 2020, 12:05

यह मानते हुए कि आपके id आपके a ऑब्जेक्ट में अद्वितीय हैं, आप एक Map इन आईडी से कुंजी के रूप में जो उनके नाम मान की ओर इशारा करती हैं। फिर आप .map() अपने b सरणी को प्रत्येक a_id से मूल्य प्राप्त करने के लिए Map में .get() का उपयोग करके देखें:

const a = [{ name: 'Jack', id: '2' }, { name: 'Jill', id: '25' }, { name: 'Bill', id: '288' } ]; 
const b = [{ title: 'alfa', a_id: '2' }, { title: 'beta', a_id: '25' } ];

const idMap = new Map(a.map(({name, id}) => [id, name]));
const res = b.map(({a_id}) => idMap.get(a_id));
console.log(res);

यदि आपकी आईडी अद्वितीय नहीं हैं, तो आप .reduce() का उपयोग id: array जोड़े के Map में मैप करने के लिए कर सकते हैं, जहां array भाग प्रत्येक आईडी के लिए नाम है। फिर आप प्रत्येक सरणी को एक बड़े सरणी में मैप करने के लिए सरणी पर .flatMap() का उपयोग कर सकते हैं:

const a = [{ name: 'Jack', id: '2' }, { name: 'Jill', id: '25' }, { name: 'Bill', id: '288' } ]; 
const b = [{ title: 'alfa', a_id: '2' }, { title: 'beta', a_id: '25' } ];

const idMap = a.reduce((map, {id, name}) => map.set(id, (map.get(id) || []).concat(name)), new Map);
const res = b.flatMap(({a_id}) => idMap.get(a_id));
console.log(res);
0
Nick Parsons 3 अप्रैल 2020, 12:27