Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.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 使用lodash获取重复值索引_Javascript_Lodash - Fatal编程技术网

Javascript 使用lodash获取重复值索引

Javascript 使用lodash获取重复值索引,javascript,lodash,Javascript,Lodash,假设我有这样一个数组:[“a”、“a”、“b”、“c”、“c”、“a”] 我需要知道哪个值在哪个索引中被复制 在这种情况下,索引0、1和5复制了“a”值,索引3和4复制了“c”值。在普通Javascript中,您可以执行以下操作: var arr=[“a”、“a”、“b”、“c”、“c”、“a”]; var排序=[]; 对于(变量i=0;i{ //如果你只需要复制品 if(arr.indexOf(e)-arr.lastIndexOf(e)==0) 返回 (o[e]=o[e]| |[])。推(i

假设我有这样一个数组:
[“a”、“a”、“b”、“c”、“c”、“a”]

我需要知道哪个值在哪个索引中被复制


在这种情况下,索引0、1和5复制了“a”值,索引3和4复制了“c”值。

在普通Javascript中,您可以执行以下操作:

var arr=[“a”、“a”、“b”、“c”、“c”、“a”];
var排序=[];
对于(变量i=0;i控制台日志(排序)我意识到你需要什么:

让arr=[“a”、“a”、“b”、“c”、“c”、“a”]
设o={}
arr.forEach((e,i)=>{
//如果你只需要复制品
if(arr.indexOf(e)-arr.lastIndexOf(e)==0)
返回
(o[e]=o[e]| |[])。推(i)
})
console.log(o)
使用Lodash:

import * as _ from "lodash";

let arr = ["a", "a", "b", "c", "c", "a"];

let result = _.omitBy(
  _.reduce(arr, (a, v, i) => _.set(a, v, (a[v] || []).concat([i])), {} ),
  v => v.length <= 1
);

console.log(result); // ​​​​​{ a: [ 0, 1, 5 ], c: [ 3, 4 ] }​​​​​
从“lodash”导入*as uuu;
设arr=[“a”、“a”、“b”、“c”、“c”、“a”];
让result=\省略(
_.reduce(arr,(a,v,i)=>集合(a,v,(a[v]| |[]).concat([i]),{}),

v=>v.length这里是ES6和lodash的一种方法。我们使用lodash和ES6中的and表示其余部分:

const data=[“a”、“a”、“b”、“c”、“c”、“a”]
const result=u.pickBy(data.reduce((r,c,i,a)=>a.indexOf(c,i)>=0?u.set(r,c,[…r[c]| |[],i])&&r:r,{}),x=>x.length>1)
console.log(结果)

输出应该是什么样的?您没有使用lodash,如果使用lodash,代码会比标记为javascript的mè少,我会感到惊讶,所以这里有一个javascript解决方案。