根据字符串数组修改数组中对象的属性

时间:2019-08-01 07:31:27

标签: javascript angular typescript

首先,很抱歉,这可能是某个地方的另一个问题的重复,但是我不知道我的措词在我的搜索中是否有误,但我无法找到解决该问题的确切方法'拥有,所以如果这是重复的话,我会提前致歉。

现在是问题。

我有一个对象数组,具有各种属性。 然后,我还有另一个字符串数组,其中每个字符串代表对象数组中对象的属性名称。

我想创建一个新的对象数组,但是该数组中的对象仅具有带有字符串数组名称的属性。

我已经花了几个小时弄弄这个,但是还没有真正按预期工作。我已经尝试过做一些Object.keys东西,同时结合了map和indexOf,但是我觉得我的逻辑中缺少了一些东西,在这一点上我还不确定。

所以基本上我有一个对象数组:

data = [
    {
        id: 1,
        name: 'john',
        value: 5
    },
    {
        id: 2,
        name: 'ben',
        value: 10
    },
    {
        id: 3,
        name: 'lisa',
        value: 12
    },
];

和一个字符串数组: desiredKeys = ['id', 'name'];

我想创建一个新的对象数组,其中每个对象仅具有'id'和'name'属性。

这是个笨蛋

https://next.plnkr.co/edit/nU4Y85j7NFuFQqAx?open=lib%2Fapp.ts

我的目标是创建一个新的对象数组,但其中的对象仅具有'desiredKeys'数组中的属性,即:

[
    {
        id: 1,
        name: 'john'
    },
    {
        id: 2,
        name: 'ben'
    },
    {
        id: 3,
        name: 'lisa'
    },
];

欢迎任何提示,谢谢!!

4 个答案:

答案 0 :(得分:3)

您可以embedConfiguration数据数组并像这样使用Object.fromEntries()

var embedConfiguration = {  
    type: 'report',  
    id: json.ReportId,  
    embedUrl: json.EmbedUrl,  
    tokenType: models.TokenType.Embed,  
    accessToken: json.EmbedToken,
    filters: [basicFilter]  
};

如果不支持map,则可以reduce键来获取每个对象的子集:

const data=[{id:1,name:"john",value:5},{id:2,name:"ben",value:10},{id:3,name:"lisa",value:12},],
      desiredKeys = ['id', 'name'];

const output = data.map(o => 
  Object.fromEntries( desiredKeys.map(k => [k, o[k]]))
)

console.log(output)

答案 1 :(得分:0)

代码更少的简单方式

使用Vanilla JavaScript,您可以像这样使用const data=[{id:1,name:"john",value:5},{id:2,name:"ben",value:10},{id:3,name:"lisa",value:12},], desiredKeys = ['id', 'name']; const output = data.map(o => desiredKeys.reduce((a, k) => ({ ...a, [k]: o[k] }), {}) ) console.log(output)运算符:

import pymysql
con = pymysql.connect("Host", "Username", "Password", "Database")
cur = con.cursor()
#taken from sample displayed
user_name = input("What is your name?:\n")
user_phone = int(input("What is your phone number:\n"))
user_city = input("Your city:\n")
cur.execute("insert into information(name,phone, city) values('{}', {}, 
'{}')".format(user_name, user_phone, user_city))
con.commit()
con.close()

答案 2 :(得分:0)

您可以使用Language Support for Java(TM)map。在forEach内部进行回调,以迭代map并从相应的对象获取键和值

desiredKey

答案 3 :(得分:0)

首先复制数据数组。使用它只会从每个元素中删除value属性。

data.forEach((i)=>  delete i.value )