我有一个数组数组,每个数组都由对象组成。这是我所指的简化版本(它是我原始数组的console.log)-
Array - [Array(2), Array(3), Array(2)]
每个数组都具有以下格式的对象(从上方获取第一个数组)-
Array(2) -
0: {name: "test", score:40, date: "2018-09-18T00:00:00.000Z"}
1: {name: "test2", score:50 date: "2018-09-18T00:00:00.000Z"}
其他数组相似,但具有相同的属性和不同的值。
我正在尝试从每个对象中获取name属性。我尝试了以下代码-但最终得到的是未定义的值:
const test1= array1.map(x=> x.values) // this gives me the array of arrays
const test2 = test1.map(function(y){return y.name})// this is my attempt to get the 'name' attribute from all of the arrays that include the objects.
我在这里错过了什么?有没有更好的方法使用箭头函数来获取属性?
答案 0 :(得分:4)
平铺,然后map
将其命名为反之亦然
首先展平,然后map
const array = [[{name: 'test1'}, {name: 'test2'}], [{name: 'test3'}, {name: 'test4'}]]
var res = [].concat(...array).map(({name})=>name);
console.log(res);
现在,map
命名为名称,然后展平
const array = [[{name: 'test1'}, {name: 'test2'}], [{name: 'test3'}, {name: 'test4'}]]
var res = [].concat(...array.map(a=>a.map(b=>b.name)))
console.log(res);
现在,在这一步中,您肯定会注意到我们实际上在每个级别上对其进行映射(我们必须采用仅映射的方法,而无需其他方式。因此,我们可以执行reduce
来代替外部地图,并将其concat
放在那里,所以我们可以避免外部concat
(用于展平),而内部concat实际上将其展平。我们去:
const array = [[{name: 'test1'}, {name: 'test2'}], [{name: 'test3'}, {name: 'test4'}]]
var res = array.reduce((r, a)=>r.concat(a.map(b=>b.name)), []);
console.log(res);
答案 1 :(得分:2)
enter code here
def spiral(a,ce,re):#a= matrix: ce=End of column: re = end of row
c=0 #c=starting of column
r=0 #r=starting of row
while(c<ce and r<re):
for i in range(r,re):
print(a[i][r],end=' ')
c += 1
for i in range(c,ce):
print(a[re-1][i],end=" ")
re -= 1
if(c<ce): #checks if columns exausted
for i in range(re-1,r-1,-1):
print(a[i][ce-1],end=' ')
ce -= 1
if(r<re): #checks if rows exausted
for i in range(ce-1,c-1,-1):
print(a[r][i],end=' ')
r+=1
#function ended
a=[]
n=int(input(""))
for j in range(n):
temp=[]
temp=list(map(int,(input().split())))
a.append(temp)
spiral(a,n,n)
答案 2 :(得分:1)
因为在第一个映射x
中是数组,而不是对象。因此,没有value
。您应该映射内部数组,然后获得所需的值。
const arr = [
[
{
name: "test",
score: 40,
date: "2018-09-18T00:00:00.000Z"
},
{ name: "test2", score: 50, date: "2018-09-18T00:00:00.000Z" }
],
[
{
name: "foo",
score: 40,
date: "2018-09-18T00:00:00.000Z"
},
{ name: "bar", score: 50, date: "2018-09-18T00:00:00.000Z" }
]
];
const test1 = arr
.map(x => x.map(y => y.name))
.reduce((acc, el) => [...acc, ...el], []);
console.log(test1);
答案 3 :(得分:0)
这里:
DataSource
您可以使用flat()将名称保留在数组中,也可以使用join()将名称合并为字符串。
答案 4 :(得分:0)
这应该工作正常。您需要展平数组结构并映射名称。
const array = [[{name: 'test1'}, {name: 'test2'}], [{name: 'test3'}, {name: 'test4'}]]
const names = array.reduce((acc, innerArray) => {
return [...acc, ...innerArray.map(entry => entry.name)]
}, [])
console.log(names)
答案 5 :(得分:0)
考虑到map返回一个数组;你遍历它。过滤或减少操作。
const test1= array1.map(x=> x.values) // x doesn't have a property named "value"
//simply use forEach
array1.forEach((el) => console.log(el.name))
如果要在集合中捕获名称:
const let container = [];
array1.forEach((el) => container.push(el.name))
更好地了解此迭代器功能的一种好方法是首先使用循环,然后尝试将您的代码“翻译”为其中一个。
答案 6 :(得分:0)
const test1= array1.map(x=> x.values)
这返回未定义。
let requiredArr = [];
let array1 = [Array(2), Array(3), Array(2)]
let test2 = array1.map(x => x.map(y => requiredArr(y.name));
test2将给出所需的结果。