React.js中如何找出数组中的相似对象?
在React.js中找出数组中的相似对象
嘿,我来帮你搞定这个问题!首先得明确:咱们说的“相似对象”,得有个判断标准——比如是基于coupon_parent、user_id这类单个字段,还是多个字段的组合?下面我给你几种常用的实现方式,你可以根据自己的需求调整。
1. 按指定字段分组,找出所有相似对象组
如果想把所有具有相同特征的对象归为一组(比如相同coupon_parent的优惠券),可以用Array.prototype.reduce()来实现分组,再筛选出有多个成员的组:
import React from 'react'; function CouponSimilarityChecker() { // 你的优惠券数据(这里补了一个相似对象方便演示) const couponsData = { "coupons": [ { "id": "376363", "price": "14400", "date": "2018-04-08 10:40:17", "user_id": "16433", "ip": "46.225.123.235", "code": "5ac9b249a0cc5", "succ": "1", "admin_seen": "1", "user_seen": "0", "coupon_id": "20821", "coupon_parent": "20821", "coupon_code": "195_2484C1_9873(7531)", "coupon_code_user": "7531", "coupon_code_partner": "195_2484C1_9873", "shop_id": "2484", "payment_type": "7", "merchent_type": "3" }, { "id": "376364", "price": "12000", "date": "2018-04-09 09:30:22", "user_id": "16433", "coupon_parent": "20821", "shop_id": "2484" }, { "id": "376365", "price": "9000", "user_id": "16434", "coupon_parent": "20822", "shop_id": "2484" } ] }; // 核心逻辑:按coupon_parent分组 const groupedCoupons = couponsData.coupons.reduce((acc, coupon) => { // 用coupon_parent作为分组的key const groupKey = coupon.coupon_parent; // 如果这个key还没创建过,就初始化一个空数组 if (!acc[groupKey]) { acc[groupKey] = []; } // 把当前优惠券加入对应分组 acc[groupKey].push(coupon); return acc; }, {}); // 筛选出有多个相似对象的分组(排除只有单个对象的组) const similarGroups = Object.values(groupedCoupons).filter(group => group.length > 1); return ( <div className="coupon-container"> <h2>相似优惠券分组</h2> {similarGroups.length > 0 ? ( similarGroups.map((group, idx) => ( <div key={idx} className="coupon-group"> <h3>分组 {idx + 1}(共同特征:coupon_parent = {group[0].coupon_parent})</h3> <ul> {group.map(coupon => ( <li key={coupon.id}> 优惠券ID:{coupon.id} | 价格:{coupon.price} | 用户ID:{coupon.user_id} </li> ))} </ul> </div> )) ) : ( <p>没有找到相似的优惠券对象</p> )} </div> ); } export default CouponSimilarityChecker;
2. 基于多个字段判断相似
如果需要同时满足多个字段才算相似(比如user_id和shop_id都相同),只需要把多个字段拼接成分组的key就行:
// 按user_id + shop_id组合分组 const groupedByUserShop = couponsData.coupons.reduce((acc, coupon) => { const groupKey = `${coupon.user_id}_${coupon.shop_id}`; if (!acc[groupKey]) { acc[groupKey] = []; } acc[groupKey].push(coupon); return acc; }, {});
3. 找出和某个特定对象相似的所有对象
如果你只想找出和某个目标对象相似的其他对象,可以用Array.prototype.filter():
// 选第一个优惠券作为目标对象 const targetCoupon = couponsData.coupons[0]; // 找出所有和它coupon_parent相同,但不是它自己的对象 const similarToTarget = couponsData.coupons.filter( coupon => coupon.coupon_parent === targetCoupon.coupon_parent && coupon.id !== targetCoupon.id );
小提示
你可以完全根据自己的业务需求调整“相似”的判断条件——比如换成coupon_code_partner、payment_type,甚至是多个字段的组合。如果你的优惠券数据是从接口异步获取的,记得把处理逻辑放在useEffect里,或者配合useState来处理哦!
内容的提问来源于stack exchange,提问作者S.M_Emamian
相关产品推荐
相关产品推荐

