使用数组列表检查对象数组中存在的值

时间:2016-10-30 08:49:50

标签: javascript arrays node.js lodash

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

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

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

我想用现有名称映射它,所以在db我有

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
    ]

1 个答案:

答案 0 :(得分:0)

我会尝试这样的事情:

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});
});

如果将ideas数组仅重写为分隔符,则可以使用map方法将每个建议分隔符替换为具有建议用户名的对象以及是否采用它。 / p>

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

输出应为:

[
    {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