मेरे पास डुप्लिकेट के साथ ऑब्जेक्ट्स की एक सरणी है। मैं उन डुप्लिकेट को हटाना चाहता हूं लेकिन "डुप्लिकेट" प्राप्त करने की आवश्यकता है जहां तीसरी कुंजी का उच्च मूल्य है।

इस समाधान का प्रयास किया: जावास्क्रिप्ट में ऑब्जेक्ट की एक सरणी से डुप्लिकेट निकालें< /ए> लेकिन यह मुझे हमेशा पहला डुप्लिकेट देता है और मुझे यह जांचना होगा कि किसके पास तीसरी कुंजी का उच्च मूल्य है।

let testArray = [
    { id: 1, value: "test1", value1: 1 },
    { id: 2, value: "test2", value1: 1 },
    { id: 1, value: "test3", value1: 5 }
];

let filtered = testArray.reduce((accumulator, current) => {
    if (!accumulator.find(({ id }) => id === current.id)) {
        accumulator.push(current);
    }
    return accumulator;
}, []);
console.log(filtered);

/* 
Result is:
[ { id: 1, value: 'test1', value1: 1 },
  { id: 2, value: 'test2', value1: 1 } ]

Result desired:
[ { id: 1, value: 'test1', value1: 5 },
  { id: 2, value: 'test2', value1: 1 } ]
*/

मुझे एक परिणाम की उम्मीद है जैसे:

[ { id: 1, value: 'test1', value1: 1 },
  { id: 2, value: 'test2', value1: 5 } ]

टेस्टअरे के

2
Wolfgang Terzer 22 जुलाई 2019, 18:49

2 जवाब

सबसे बढ़िया उत्तर

आप सूचकांक की खोज कर सकते हैं और यदि मान्य है तो मान की जांच करें और यदि मान अधिक है तो सरणी को अपडेट करें।

let testArray = [
    { id: 1, value: "test1", value1: 1 },
    { id: 2, value: "test2", value1: 1 },
    { id: 1, value: "test3", value1: 5 }
];

let filtered = testArray.reduce((accumulator, current) => {
    let index = accumulator.findIndex(({ id }) => id === current.id)
    if (index === -1) {
        accumulator.push(current);
    } else if (accumulator[index].value1 < current.value1) {
        accumulator[index] = current;
    }
    return accumulator;
}, []);

console.log(filtered);
2
Nina Scholz 22 जुलाई 2019, 18:55

बस प्रत्येक आईडी के अनुरूप नक्शा बनाए रखें, और यदि मौजूदा मान नए मान से कम है तो मानचित्र को अपडेट करें, मानचित्र पर Object.values() आपको वांछित परिणाम देगा:

let testArray = [ { id: 1, value: "test1", value1: 1 }, { id: 2, value: "test2", value1: 1 }, { id: 1, value: "test3", value1: 5 } ];

let filtered = Object.values(testArray.reduce((acc, curr)=>{
  acc[curr.id] = acc[curr.id] && acc[curr.id].value1 > curr.value1 ?  acc[curr.id] : curr;
  return acc;
},{}));
console.log(filtered);
0
amrender singh 22 जुलाई 2019, 18:59