【问题标题】:How to check if string within object is unique in array如何检查对象内的字符串在数组中是否唯一
【发布时间】:2015-10-23 14:11:41
【问题描述】:

我有一个 array 字符串

var arr = [
    {str: 'abc'},
    {str: 'def'},
    {str: 'abc'},
    {str: 'ghi'},
    {str: 'abc'},
    {str: 'def'},
];

我正在寻找一种智能方式来将布尔属性unique 添加到对象,无论str 是否唯一:

var arr = [
    {str: 'abc', unique: false},
    {str: 'def', unique: false},
    {str: 'abc', unique: false},
    {str: 'ghi', unique: true},
    {str: 'abc', unique: false},
    {str: 'def', unique: false},
];

我的解决方案包含三个_.each() 循环,看起来很糟糕...首选lodash 的解决方案。

【问题讨论】:

    标签: javascript arrays string comparison lodash


    【解决方案1】:

    您可以使用where 过滤对象。然后你就可以知道你的字符串在对象中是否是唯一的。

    _.each(arr, function(value, key) {
        arr[key] = {
            str : value.str,
            unique : _.where(arr, { str : value.str }).length == 1 ? true : false
        };
    });
    

    map 可能会更好:

    arr = _.map(arr, function(value) {
        return {
            str : value.str,
            unique : _.where(arr, { str : value.str }).length == 1 ? true : false
        };
    });
    

    【讨论】:

    • 正是我想要的。现在将有一个更好的周末,谢谢!
    【解决方案2】:

    你不需要任何库,vanilla js 可以工作:

    var map = [];
    var arr = [
        {str: 'abc'},
        {str: 'def'},
        {str: 'abc'},
        {str: 'ghi'},
        {str: 'abc'},
        {str: 'def'},
    ];
      
    arr.forEach(function(obj) {
        if (map.indexOf(obj.str) < 0) {
          map.push(obj.str);
          obj.unique = true;
          return;
        }
        arr.forEach(function(o) {
          if (o.str === obj.str) o.unique = false;
        });
    });
    
    document.write("<pre>");  
    document.write(JSON.stringify(arr, null, "  "));
    document.write("</pre>");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-26
      • 2017-09-22
      • 1970-01-01
      • 2023-03-11
      • 2021-11-20
      • 2013-05-20
      • 2019-07-06
      • 1970-01-01
      相关资源
      最近更新 更多