问答

js对象,怎么根据两个参数去匹配对应的数据

作者:admin 2021-05-08 我要评论

怎么根据两个字段去匹配,比如,val1 = '黄色' val2 = '23' 就匹配list里第一条 list:[ { id:1, skuName: "{"颜色":"黄色","尺码":"23"}", name:'裤子', img:'/2...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

怎么根据两个字段去匹配,比如,val1 = '黄色' val2 = '23' 就匹配list里第一条

list:[
    {
        id:1,
        skuName: "{"颜色":"黄色","尺码":"23"}",
        name:'裤子',
        img:'/2020/01/11/1609929447463906.png'
    },
    {
        id:2,
        skuName: "{"颜色":"黄色","尺码":"24"}",
        name:'裤子',
        img:'/2020/01/11/1609929447463765.png'
    },
    {
        id:3,
        skuName: "{"颜色":"蓝色","尺码":"23"}",
        name:'裤子',
        img:'/2020/01/11/1609929447490906.png'
    },
    {
        id:4,
        skuName: "{"颜色":"蓝色","尺码":"24"}",
        name:'裤子',
        img:'/2020/01/11/1609929447465496.png'
    }
]
###

list.find(fun)

fun 就是判断是否合规的方法,入参是当前对象 list[0] list[1]

image.png
![上传中...]()

###

根据linong老师的思路写如下代码

let list = [
  {
    id: 1,
    skuName: { 颜色: "黄色", 尺码: "23" },
    name: "裤子",
    img: "/2020/01/11/1609929447463906.png",
  },
  {
    id: 2,
    skuName: { 颜色: "黄色", 尺码: "24" },
    name: "裤子",
    img: "/2020/01/11/1609929447463765.png",
  },
  {
    id: 3,
    skuName: { 颜色: "蓝色", 尺码: "23" },
    name: "裤子",
    img: "/2020/01/11/1609929447490906.png",
  },
  {
    id: 4,
    skuName: { 颜色: "蓝色", 尺码: "24" },
    name: "裤子",
    img: "/2020/01/11/1609929447465496.png",
  },
];

function findItem(list) {
  return (...args) => {
    return list.find(
      (item) => Object.values(item.skuName).toString() == args.toString()
    );
  };
}

console.log(findItem(list)("黄色", 23));
###

定义一个共用的方法来实现。设置参数为color和size。可以筛选一个条件也可以筛选两个。

// list 查询数据库返回的json
// color 查询的颜色参数
// size 查询的尺寸参数
function findObj(list, color="", size="") {
    let newArr = [];
    if(list.length > 0 ) {
        list.forEach(item => {
            if(color && item.skuName.color === color && size && item.skuName.size === size)     {
                newArr.push(item)
               }
            else if( !color && size && item.skuName.size === size) {
                newArr.push(item)
            }
            else if( !size && color && item.skuName.color === color) {
                newArr.push(item)
            } else {
                console.log("没有设置筛选条件")
            }  
        })
    }
    return newArr
}
###

如果数据文件结构明确,查询数据结构明确,是一个比较好处理的过程,就是遍历比较。
这里我想可能不明确的地方是查询数据结构不明确,则可以考虑同时双搜索,毕竟查询变量只有2个,交换处理一下问题也比较好解决,而且这两种数据差异很大。

function findObj(list, val1,val2 ){
    let rt={};
    for(let i=0;i<list.length;i++){
        if( (list[i]["skuName"]["颜色"]==val1 && list[i]["skuName"]["尺码"]==val2) ||
            (list[i]["skuName"]["颜色"]==val2 && list[i]["skuName"]["尺码"]==val1) )
            {
                rt=list[i];
                break;
             }
    }
    return rt;
}
console.log(findObj(list,23,"蓝色" ));
console.log(findObj(list,"黄色",23 ));
console.log(findObj(list,"黄色",25 ));
###

。。。。

val1 = "黄色";
val2 = "24";
const result = list.find(i => i.skuName["颜色"] === val1 && i.skuName["尺码"]=== val2);

如果结果唯一就用 list.find, 返回列表单个元素

如果结果不唯一就用list.filter, 返回多个元素

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • js对象,怎么根据两个参数去匹配对应的

    js对象,怎么根据两个参数去匹配对应的

  • react中dispatch action修改redux stor

    react中dispatch action修改redux stor

  • freemarker assign语句中参数为String[

    freemarker assign语句中参数为String[

  • 如何在开发环境实现 webpack 4 product

    如何在开发环境实现 webpack 4 product

腾讯云代理商
海外云服务器