数组中相同的值置为true,只有一个值为false

新手上路,请多包涵

[

{id:1,value:2},
{id:2,value:2},
{id:3,value:1},
{id:4,value:1},
{id:5,value:3},
{id:6,value:4}

]
// TODO 转换成
[

{id:1,value:2,bol:true},
{id:2,value:2,bol:true},
{id:3,value:1,bol:true},
{id:4,value:1,bol:true},
{id:5,value:3,bol:false},
{id:6,value:4,bol:false}

]
根据value值相同的第一个加上一个字段为true其余为false 如果是单个的就直接为true
大佬们可以看下嘛

阅读 3k
4 个回答
const arr = [
    { id: 1, value: 2 },
    { id: 2, value: 2 },
    { id: 3, value: 1 },
    { id: 4, value: 1 },
    { id: 5, value: 3 },
    { id: 6, value: 4 }
]


// {id:1,value:2,bol:true},
// {id:2,value:2,bol:true},
// {id:3,value:1,bol:true},
// {id:4,value:1,bol:true},
// {id:5,value:3,bol:false},
// {id:6,value:4,bol:false}
const map = {}
arr.forEach(({ id, value }) =>map[value]=map[value] !== undefined)
 //{
  //  map.get(value) != undefined ? map.set(value, true) : map.set(value, false)
//}

const newarr = arr.map(item => ({ ...item, bool: map[item.value]}))
console.log(newarr)

//
[
  { id: 1, value: 2, bool: true },
  { id: 2, value: 2, bool: true },
  { id: 3, value: 1, bool: true },
  { id: 4, value: 1, bool: true },
  { id: 5, value: 3, bool: false },
  { id: 6, value: 4, bool: false }
]

省事的

a.map(x => x.bol = !!a.find(y => y.id !== x.id && y.value === x.value));
console.log(a);

复杂一点的

a.map(x => {
    if (x.bol === undefined)
        x.bol = a.filter(y => {
            if(y.value === x.value) {
                if(y.id === x.id)
                    y.bol = true;
                return true
            }
        }).length > 1;
});
console.log(a);
var arr = [
{id:1,value:2},
{id:2,value:2},
{id:3,value:1},
{id:4,value:1},
{id:5,value:3},
{id:6,value:4}
]
const result = arr.map(item => ({...item,bol:arr.filter(r => r.value===item.value).length>1}))
console.log(result)
function transform(arr) {
    for (var i = 0; i < arr.length; ++i) {
        if (arr[i].bol != null) continue;
        arr[i].bol = false;
        for (var j = i + 1; j < arr.length; ++j) {
            if (arr[j].value === arr[i].value) {
                arr[j].bol = arr[i].bol = true;
            }
        }
    }
    return arr;
}
console.dir(transform([
    {
        "id": 1,
        "value": 2
    },
    {
        "id": 2,
        "value": 2
    },
    {
        "id": 3,
        "value": 1
    },
    {
        "id": 4,
        "value": 1
    },
    {
        "id": 5,
        "value": 3
    },
    {
        "id": 6,
        "value": 4
    }
]));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题