sku数据格式转化

玩过淘宝数据接口的估计知道sku是什么,而我是首次听,虽然我上家公司分析过淘宝商家数据。

什么是sku,我过几天再补充,我先发我理解的sku数据格式实现代码,大概是这么个意思吧。

<script>
  var data = [
    {
      "d": '1232323',
      "v": '2331:23213;1323:123243;1:2',
      "b": '颜色:黑色;尺码:30;大小:sm'
    },
    {
      "d": '1232323',
      "v": '2331:2323;1323:12243',
      "b": '颜色:白色;尺码:38'
    },
    {
      "d": '1232323',
      "v": '2331:23;1323:12243',
      "b": '颜色:紫色;尺码:38'
    }
  ]

  var formated_data = [
    {
      "id": null,
      "title": null,
      "values": [],
      "labels": []
    }
  ];

  data.forEach( function( obj ){
    for( var key in obj ){
      if ( key == "v" ) {
        var vArr = obj[key].split( ';' );
        var bArr = obj['b'].split( ';' );

        vArr.forEach( function( item, index ){

          var subVArr = item.split( ':' );
          var subBArr = bArr[index].split( ':' );

          subVArr.forEach( function( subVItem, subVIndex ){
            if ( subVIndex == 0 ) {
              addData( formated_data, subVItem, subBArr[1], subBArr[0], subVArr[1] )
            }
          } )

        } )

      };
    }
  } )

  function addData( formated_data, id, value, title, label ){

    var canPush = true;

    formated_data.forEach(function( item, index ){

      for( var formated_key in item ){
        if ( formated_key == 'id' && item[formated_key] == id ) {
          canPush = false;
          if ( item.values != undefined && item.values.indexOf( value ) > -1 ) {

          }else{
            item.values.push( value );
          }

          if ( item.labels != undefined && item.labels.indexOf( label ) > -1 ) {
            
          }else{
            item.labels.push( label );
          }

        }
      }

    });

    if ( canPush ) {
      formated_data.push( {
        "id": id,
        "title": title,
        "values": [value],
        "labels": [label]
      } )
    }

  }

  formated_data.shift();

  console.log( formated_data );
</script>


查看官方给出的答案,非常精简:

var indexOf = function(val, arr){
	for(var i = 0; i < arr.length; i++){
		if(arr[i] == val){
			return i;
		};
	};
	return -1;
};
var maps = {}												//缓存键值
	, skuArr = [];											//转换后的SKU对象数组
arr.forEach(function(item){									//循环遍历原数组
	var idRegexp = item.v.match(/([\d]+)/ig)				//正则匹配ID
		, nameRegexp = item.b.match(/([^\;\:]+)/ig);		//正则匹配名称
	idRegexp.forEach(function(id, index){					//遍历ID
		if(index % 2 === 0){								//通过游标判断当前ID是属性还是属性值
			if(maps[id] == null){							//如果为属性ID就创建一个SKU对象
				maps[id] = skuArr.length;					//将SKU对象所在下标记录下来, 方便后续判断SKU是否已存在
				skuArr.push({								//添加一个SKU对象
					'id': id
					, 'title': nameRegexp[index]
					, 'values': []
					, 'labels': []
				});
			};
		}else{												//属性值
			var sku = skuArr[maps[idRegexp[index - 1]]];	//获取SKU对象
			if(indexOf(id, sku.values) < 0){				//如果SKU属性值不存在
				sku.values.push(id);						//添加SKU属性值ID
				sku.labels.push(nameRegexp[index]);			//添加SKU属性值名称
			};
		};
	});
});
console.log(JSON.stringify(skuArr, null, 4));				//console输出结果

测试数据在这里:

var arr = [{"d":"754630","v":"1627207:28341;20518:662626359","b":"颜色:黑色;尺码:28"},{"d":"754683","v":"1627207:28337;20518:103189693","b":"颜色:浅蓝色;尺码:38"},{"d":"754632","v":"1627207:28341;20518:444706729","b":"颜色:黑色;尺码:30"},{"d":"754633","v":"1627207:28341;20518:662626362","b":"颜色:黑色;尺码:31"},{"d":"754634","v":"1627207:28341;20518:73406764","b":"颜色:黑色;尺码:32"},{"d":"754635","v":"1627207:28341;20518:662626364","b":"颜色:黑色;尺码:33"},{"d":"754636","v":"1627207:28341;20518:147478970","b":"颜色:黑色;尺码:34"},{"d":"754637","v":"1627207:28341;20518:59280855","b":"颜色:黑色;尺码:36"},{"d":"754638","v":"1627207:28341;20518:103189693","b":"颜色:黑色;尺码:38"},{"d":"754639","v":"1627207:28331;20518:662626359","b":"颜色:卡其色;尺码:28"},{"d":"754640","v":"1627207:28331;20518:662626360","b":"颜色:卡其色;尺码:29"},{"d":"754641","v":"1627207:28331;20518:444706729","b":"颜色:卡其色;尺码:30"},{"d":"754642","v":"1627207:28331;20518:662626362","b":"颜色:卡其色;尺码:31"},{"d":"754643","v":"1627207:28331;20518:73406764","b":"颜色:卡其色;尺码:32"},{"d":"754644","v":"1627207:28331;20518:662626364","b":"颜色:卡其色;尺码:33"},{"d":"754645","v":"1627207:28331;20518:147478970","b":"颜色:卡其色;尺码:34"},{"d":"754646","v":"1627207:28331;20518:59280855","b":"颜色:卡其色;尺码:36"},{"d":"754647","v":"1627207:28331;20518:103189693","b":"颜色:卡其色;尺码:38"},{"d":"754648","v":"1627207:30155;20518:662626359","b":"颜色:杏色;尺码:28"},{"d":"754649","v":"1627207:30155;20518:662626360","b":"颜色:杏色;尺码:29"},{"d":"754650","v":"1627207:30155;20518:444706729","b":"颜色:杏色;尺码:30"},{"d":"754651","v":"1627207:30155;20518:662626362","b":"颜色:杏色;尺码:31"},{"d":"754652","v":"1627207:30155;20518:73406764","b":"颜色:杏色;尺码:32"},{"d":"754653","v":"1627207:30155;20518:662626364","b":"颜色:杏色;尺码:33"},{"d":"754654","v":"1627207:30155;20518:147478970","b":"颜色:杏色;尺码:34"},{"d":"754655","v":"1627207:30155;20518:59280855","b":"颜色:杏色;尺码:36"},{"d":"754656","v":"1627207:30155;20518:103189693","b":"颜色:杏色;尺码:38"},{"d":"754657","v":"1627207:3232484;20518:662626359","b":"颜色:天蓝色;尺码:28"},{"d":"754658","v":"1627207:3232484;20518:662626360","b":"颜色:天蓝色;尺码:29"},{"d":"754659","v":"1627207:3232484;20518:444706729","b":"颜色:天蓝色;尺码:30"},{"d":"754660","v":"1627207:3232484;20518:662626362","b":"颜色:天蓝色;尺码:31"},{"d":"754661","v":"1627207:3232484;20518:73406764","b":"颜色:天蓝色;尺码:32"},{"d":"754662","v":"1627207:3232484;20518:662626364","b":"颜色:天蓝色;尺码:33"},{"d":"754663","v":"1627207:3232484;20518:147478970","b":"颜色:天蓝色;尺码:34"},{"d":"754664","v":"1627207:3232484;20518:59280855","b":"颜色:天蓝色;尺码:36"},{"d":"754665","v":"1627207:3232484;20518:103189693","b":"颜色:天蓝色;尺码:38"},{"d":"754666","v":"1627207:3707775;20518:662626359","b":"颜色:宝蓝色;尺码:28"},{"d":"754667","v":"1627207:3707775;20518:662626360","b":"颜色:宝蓝色;尺码:29"},{"d":"754668","v":"1627207:3707775;20518:444706729","b":"颜色:宝蓝色;尺码:30"},{"d":"754669","v":"1627207:3707775;20518:662626362","b":"颜色:宝蓝色;尺码:31"},{"d":"754670","v":"1627207:3707775;20518:73406764","b":"颜色:宝蓝色;尺码:32"},{"d":"754671","v":"1627207:3707775;20518:662626364","b":"颜色:宝蓝色;尺码:33"},{"d":"754672","v":"1627207:3707775;20518:147478970","b":"颜色:宝蓝色;尺码:34"},{"d":"754673","v":"1627207:3707775;20518:59280855","b":"颜色:宝蓝色;尺码:36"},{"d":"754674","v":"1627207:3707775;20518:103189693","b":"颜色:宝蓝色;尺码:38"},{"d":"754675","v":"1627207:28337;20518:662626359","b":"颜色:浅蓝色;尺码:28"},{"d":"754676","v":"1627207:28337;20518:662626360","b":"颜色:浅蓝色;尺码:29"},{"d":"754677","v":"1627207:28337;20518:444706729","b":"颜色:浅蓝色;尺码:30"},{"d":"754678","v":"1627207:28337;20518:662626362","b":"颜色:浅蓝色;尺码:31"},{"d":"754679","v":"1627207:28337;20518:73406764","b":"颜色:浅蓝色;尺码:32"},{"d":"754680","v":"1627207:28337;20518:662626364","b":"颜色:浅蓝色;尺码:33"},{"d":"754681","v":"1627207:28337;20518:147478970","b":"颜色:浅蓝色;尺码:34"},{"d":"754682","v":"1627207:28337;20518:59280855","b":"颜色:浅蓝色;尺码:36"},{"d":"754631","v":"1627207:28341;20518:662626360","b":"颜色:黑色;尺码:29"}];

 

作者: 曾小乱

喜欢写点有意思的东西

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据