【问题标题】:Check value existing in a array of object using a list of array使用数组列表检查对象数组中存在的值
【发布时间】:2017-03-12 15:54:31
【问题描述】:

我正在挠头解决这个问题。我什至尝试过 lodash 但没有运气。挑战是使用用户名列表检查用户名列表。

用户名由名字和姓氏组成,中间是动态变量

const suggestion_username = [
    fname + "&" + lname,
    fname + "+" + lname,
    fname + "." + lname,
    fname + lname
]

我想用已有的名字来映射它,所以在数据库中我有

const existed_name = [
{username:'something'},
{username:'john.james'},
{username:'johnjames'}
]

所以如果我想要的结果是

[
        {username:fname + "&" + lname,taken:0},
        {username:fname + "+" + lname,taken:0},
        {username:fname + "." + lname,taken:1}, //taken
        {username:fname + lname,taken:1}, //taken
    ]

【问题讨论】:

  • 你尝试了什么?
  • 试过 _.map 和 _.each。你不会希望我看到我的乱七八糟的解决方案不起作用,这会让你更加困惑。

标签: javascript arrays node.js lodash


【解决方案1】:

我会尝试这样的:

const fname = 'John';
const lname = 'James';

const suggestions = [
    "&", "+", ".", ""
];

const available_usernames = suggestions.map((sep) => {
    const genUsername = {username: `${fname}${sep}${lname}`};
    if (existed_username.find(username => username === genUsername.username)) {
        return Object.assign(genUsername, {taken: 1});
    } 
    return Object.assign(genUsername, {taken: 0});
});

如果仅将建议数组重写为分隔符,则可以使用 map 方法将其转换为新数组,方法是将每个建议分隔符替换为具有建议用户名以及是否被采纳的对象。

find 方法返回满足条件(即建议的用户名与现有用户名匹配)或未定义的数组的第一个元素。我们可以使用它来填充新数组的每个对象中的获取字段。

输出应该是:

[
    {username: 'John&James', taken: 0},
    {username: 'John+James', taken: 0},
    {username: 'John.James', taken: 1},
    {username: 'JohnJames', taken: 1},
]

在此处查看工作笔:http://codepen.io/Smmaca/pen/gwNRKK?editors=0011

【讨论】:

猜你喜欢
  • 2017-03-22
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多