Node.js 如何按行进行搜索?
我只是在学习不要严格评判。我试着做Rest客户端。我想按行进行数据搜索。 目前,我只想尝试在数组中查找给定的数据。如果其中一行相同,则会显示消息OK,而在其他行中显示No。但是我有所有消息显示No。如何修复它Node.js 如何按行进行搜索?,node.js,Node.js,我只是在学习不要严格评判。我试着做Rest客户端。我想按行进行数据搜索。 目前,我只想尝试在数组中查找给定的数据。如果其中一行相同,则会显示消息OK,而在其他行中显示No。但是我有所有消息显示No。如何修复它 var data = querystring.stringify({ Name: "CEO" }) var req = http.request(options, function(res) { console.log("status: " + res.status
var data = querystring.stringify({
Name: "CEO"
})
var req = http.request(options, function(res) {
console.log("status: " + res.statusCode);
var content = ''
res.on('data', function(chunk) {
content += chunk
for (var i = 0; i < content.length; i++) {
if (content[i] === data) {
console.log('Ок')
} else {
console.log('No')
}
}
});
}).on('error', function(e) {
console.log("error: " + e.message);
});
req.write(data)
req.end()
答复:
body: {"rowsCount":75,"rows":[..., {"Id":75,"Name":"CEO"}]}
代码中存在一些编程/逻辑问题,使您无法获得所需的结果 编程中最重要的部分(有时是最棘手的部分)之一是了解正在处理的数据类型,然后正确地处理它们 与您正在解决的问题一样,从API返回的数据采用
JSON
格式,在javascript中可以被视为object
。您不必使用字符串concat将它们附加到content
变量。通过将chunk附加到content
变量,可以将返回给您的整个数据集转换为字符串,对字符串执行for循环与对数组执行for循环的结果截然不同
第二个问题是,如果您查看通过api返回给您的数据结构,则要搜索的记录列表位于行
属性下,因此,您应该只遍历块.rows
建议对代码进行如下修复:
var searchQuery = 'SEO';
var req = http.request(options, function(res) {
res.on('data', function(chunk) {
for (var i = 1; i <= chunk.rows.length; i++) {
if (chunk.rows[i].Name === searchQuery) {
console.log('Ок')
} else {
console.log('No')
}
}
});
}).on('error', function(e) {
console.log("error: " + e.message);
});
req.write(data)
req.end()
var searchQuery='SEO';
var req=http.request(选项、函数(res){
res.on('data',函数(块){
对于(var i=1;i,代码中存在一些编程/逻辑问题,使您无法获得所需的结果
编程中最重要的部分(有时是最棘手的部分)之一是了解正在处理的数据类型,然后正确地处理它们
正如您正在解决的问题一样,从API返回的数据是JSON
格式,在javascript中可以被视为object
。您不必通过字符串concat将它们附加到content
变量。通过将chunk附加到content
变量,您可以将整个数据集返回给您o字符串,对字符串执行for循环与对数组执行for循环的结果非常不同
第二个问题是,如果您查看通过api返回给您的数据结构,则要搜索的记录列表位于行
属性下,因此,您应该只遍历块.rows
建议对代码进行如下修复:
var searchQuery = 'SEO';
var req = http.request(options, function(res) {
res.on('data', function(chunk) {
for (var i = 1; i <= chunk.rows.length; i++) {
if (chunk.rows[i].Name === searchQuery) {
console.log('Ок')
} else {
console.log('No')
}
}
});
}).on('error', function(e) {
console.log("error: " + e.message);
});
req.write(data)
req.end()
var searchQuery='SEO';
var req=http.request(选项、函数(res){
res.on('data',函数(块){
对于(var i=1;i
循环的将跳过返回数据的第一个元素
您没有正确访问所需的搜索属性
您的查询是一个字符串,您正在针对该字符串测试对象的相等性
您需要访问传入数据的行
属性,然后执行查询:
尝试一:
const rowsToSearch = content.rows; // #2
for (var i = 0; i < rowsToSearch.length; i++) { // #1
if (rowsToSearch[i].Name === 'CEO') { // #3
console.log('Ок')
} else {
console.log('No')
}
}
循环的将跳过返回数据的第一个元素
您没有正确访问所需的搜索属性
您的查询是一个字符串,您正在针对该字符串测试对象的相等性
您需要访问传入数据的行
属性,然后执行查询:
尝试一:
const rowsToSearch = content.rows; // #2
for (var i = 0; i < rowsToSearch.length; i++) { // #1
if (rowsToSearch[i].Name === 'CEO') { // #3
console.log('Ок')
} else {
console.log('No')
}
}
可能是因为您的API请求正在处理一个流
。您正在使用的API到底返回了什么?向我们展示@ethane提到的从该API返回的内容。为此,请执行控制台.log()
要打印chunk
@ethane的值,我添加了结果,但不是完整数组,它是big@Rai我在responseMaybe中添加了结果,这可能是因为您的API请求正在处理一个流
。您正在使用的API到底返回了什么?请向我们展示@ethane提到的从该API返回的内容。为此,请执行console.log()
以打印chunk
@ethane的值,我添加了结果,但不是完整数组,它是big@Rai我在responseBe中添加了结果,注意到行中的Id
属性
有效负载,因为它只会尝试匹配{Name:'CEO'}
意思是。isEqual({Name:'CEO'},{'Id':75,Name:'CEO'})
将是false
我总是有以下错误:for(var I=0;I
的属性'length',显然问题就在这里。const rowsToSearch=chunk.rows;
即chunk.rows
,然后我建议继续追加到内容
变量并循环。请注意Id
pro在您的行
有效负载中,按目前的情况,这只会尝试匹配{Name:'CEO'}
,这意味着.isEqual({Name:'CEO'},{'Id':75,Name:'CEO'})
将是false
我总是有以下错误:for(var I=0;I
的属性'length',显然问题就在这里。const rowsToSearch=chunk.rows;
即chunk.rows
然后我建议继续追加到内容
变量并循环。
const query = { Name: 'CEO' };
const rowsToSearch = chunk.rows;
const result = rowsToSearch.find(row => _.isEqual(row, query));
result ? console.log('OK') : console.log('No');