Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用另一个子数组中的值填充数组_Javascript_Jquery_Arrays_Json_Underscore.js - Fatal编程技术网

Javascript 用另一个子数组中的值填充数组

Javascript 用另一个子数组中的值填充数组,javascript,jquery,arrays,json,underscore.js,Javascript,Jquery,Arrays,Json,Underscore.js,假设我有一个json结果,如下所示: { "results": [{ "id": 1, "name": "test1" }, { "id": 2, "name": "test2", "tags": [{"name": "car"},{ "name": "love"}] }, { "id": 3, "name": "test3", "tags": [{"name": "car"},{"name": "b

假设我有一个json结果,如下所示:

{
  "results": [{
      "id": 1, "name": "test1"
    },
    {
      "id": 2, "name": "test2",
      "tags": [{"name": "car"},{ "name": "love"}]
    },
    {
      "id": 3, "name": "test3",
      "tags": [{"name": "car"},{"name": "bike"},{"name": "motorcycle"}]
    }
  ]
}
我想挂载一个新的阵列只有唯一的标签,在这个例子中将是汽车,爱情,自行车,摩托车

有时标记为null或空

有没有办法不用循环就能做到这一点?jquery或下划线是否适合此选项?可以用纯javascript完成吗


干杯

既然您询问了
下划线
,我将为您提供
洛达斯
解决方案(因为洛达斯已经有效地取代了下划线)。您可以使用
lodash
使用内置方法的函数方法来实现这一点,如下所示:

  • _.flatMap()--将object by属性中的值捕获到单个数组中,并展平任何嵌套数组

  • _.compact()--删除任何
    false
    null
    0
    未定义的
    NaN

  • _.map()--同上,没有展平(此处不需要)

  • _.uniq()--仅返回唯一值

var数据={
“结果”:[{
“id”:1,“name”:“test1”
},
{
“id”:2,“name”:“test2”,
“标签”:[{“姓名”:“汽车”},{“姓名”:“爱情”}]
},
{
“id”:3,“name”:“test3”,
“标签”:[{“名称”:“汽车”},{“名称”:“自行车”},{“名称”:“摩托车”}]
}
]
};
var uniq=q.uniq(q.map(q.compact(q.flatMap(data.results,“tags”),“name”);
控制台日志(uniq)

第二个数组看起来怎么样?(您要添加到此数组中的一个)@Max08仅带有标记名[{“name”:“love”}、{“name”:“bike”}]@2Fast4YouBR添加了一个lodash解决方案(如果您感兴趣)。
const tagSet = new Set (                      // use ES6 set to get rid of duplicates
    obj.results
       .filter(r => r.hasOwnProperty('tags')) // check for tags property
       .map(r => r.tags)                      // extract array of array of tag obj
       .reduce((a, b) => a.concat(b), [])     // flatten into array of obj
       .map(flat => flat.name)                // extract name property
);
const uniques = [...tagSet];                  // convert back into array

console.log(uniques); // [ 'car', 'love', 'bike', 'motorcycle' ]