You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:14:47